sql >> Database teknologi >  >> RDS >> Mysql

JSON_QUOTE() – Sådan undslipper du tegn i strenge, der bruges som JSON-værdier i MySQL

Når du arbejder med JSON og MySQL, kan det nogle gange være nødvendigt at undslippe strenge, så deres citattegn ikke forstyrrer fortolkningen af ​​JSON-dokumentet. I sådanne tilfælde kan du bruge JSON_QUOTE() funktion til at undslippe potentielt problematiske strenge.

JSON_QUOTE() bruges til at producere en gyldig JSON streng literal, der kan inkluderes i et JSON dokument. For eksempel vil du måske have et element i en matrix til at have teksten null som en streng bogstavelig i stedet for at have en faktisk nulværdi. Denne funktion kan bruges til at sikre, at teksten tilføjes som en streng, i stedet for en nulværdi.

For at bruge den skal du blot kalde funktionen, mens du sender strengen.

Syntaks

Syntaksen ser sådan ud:

JSON_QUOTE(streng)

Hvor string er den streng, der skal escapes.

Eksempel 1 – Grundlæggende brug

Her er et eksempel til at demonstrere.

Lad os først se på, hvad der sker, når vi bruger JSON_ARRAY() funktion til at oprette et array.

VÆLG JSON_ARRAY("Varm", "Varm", "Kold") SOM 'Resultat';

Resultat:

+------------------------+| Resultat |+-------------------------+| ["Varm", "Varm", "Kold"] |+-------------------------+

Resultatet er et array, der indeholder 3 elementer. Vi ved, at det er et array, fordi det starter med en åbnende firkantet parentes ([ ) og slutter med en afsluttende firkantet parentes (] ). Vi ved også, at hvert element er en streng, fordi de er omgivet af dobbelte anførselstegn. Et komma adskiller hvert element.

Lad os nu se, hvad der sker, når vi bruger JSON_QUOTE() i stedet.

VÆLG JSON_QUOTE('"Varm", "Varm", "Kold"') SOM 'Resultat';

Resultat:

+---------------------------------------+| Resultat |+--------------------------------------+| "\"Varmt\", \"Varmt\", \"Koldt\"" |+---------------------------------------- --+

Vi får ikke en matrix. Vi får en snor. Vi ved, at det er en streng, fordi den starter og slutter med et dobbelt anførselstegn. Alle dobbelte anførselstegn i strengen er escaped med omvendt skråstreg (\ ).

Hvis disse tegn ikke var escaped, det første dobbelte anførselstegn (efter Hot ) ville utilsigtet afslutte strengen. Derfor ville vi ikke være i stand til at inkludere resten af ​​strengen. Ved at undslippe visse karakterer fortæller vi MySQL om ikke at fortolke disse karakterer, som det normalt ville.

Eksempel 2 – Tal

Det samme koncept gælder for tal, bortset fra at tal ikke er omgivet af dobbelte anførselstegn.

Så vi kan oprette en matrix, der indeholder 3 elementer, som alle er tal.

VÆLG JSON_ARRAY(1, 2, 3) SOM 'Resultat';

Resultat:

+------------+| Resultat |+-----------+| [1, 2, 3] |+------------+

Og her er, hvad der sker, hvis vi skifter over til JSON_QUOTE() funktion.

SELECT JSON_QUOTE('[1, 2, 3]') SOM 'Resultat';

Resultat:

+-------------+| Resultat |+-------------+| "[1, 2, 3]" |+-------------+

Så vi får det samme resultat, bortset fra at hele arrayet er omgivet af dobbelte anførselstegn. Dette gør det til en streng i stedet for en matrix.

Eksempel 3 – Tilføjelse til arrays/objekter

Vi kunne tage denne streng bogstaveligt og tilføje den som et element i et array.

VÆLG JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'), 8, 9) SOM 'Resultat';

Resultat:

+------------------------+| Resultat |+-------------------------+| ["\"[1, 2, 3]\"", 8, 9] |+--------------------------------+

I dette tilfælde er strengen literal det første element med 8 og 9 er henholdsvis andet og tredje element.

Vi kunne også bruge denne streng bogstavelig i et objekt.

SELECT JSON_OBJECT('Nøgle', JSON_QUOTE('[1, 2, 3]')) SOM 'Resultat';

Resultat:

+--------------------------------+| Resultat |+---------------------------+| {"Nøgle":"\"[1, 2, 3]\""} |+--------------------------------+ 

Eksempel 4 – Udtræk af værdier

Så hvis vi har brug for at udtrække værdier fra vores JSON-dokument, vil det blive fortolket som en streng-literal i stedet for en matrix.

For det første, her er, hvad der sker, hvis vi sætter en matrix med de tre tal som separate elementer, og derefter trækker det første element ud fra matrixen.

SET @data1 =JSON_ARRAY(1, 2, 3);SELECT @data1 AS '@data1', JSON_EXTRACT(@data1, '$[0]');

Resultat:

+------+------------------------------------+| @data1 | JSON_EXTRACT(@data1, '$[0]') |+-----------+------------------------ ------+| [1, 2, 3] | 1 |+-----------+-------------------------------------+

Så dette array består af tre elementer – hvert element er et separat element i arrayet.

Her er hvad der sker, hvis vi bruger JSON_QUOTE() for at få alle tre tal og deres firkantede parenteser konverteret til en streng-literal, skal du tilføje det til arrayet og derefter udtrække det første element i arrayet.

SET @data2 =JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'));SELECT @data2 AS '@data2', JSON_EXTRACT(@data2, '$[0]');

Resultat:

+--------------------+-------------------------------- ----+| @data2 | JSON_EXTRACT(@data2, '$[0]') |+------------------+---------------- --------------+| ["\"[1, 2, 3]\""] | "\"[1, 2, 3]\"" |+------------------------+-------------------- ---------------+

Så i dette tilfælde består arrayet kun af ét element – ​​hele strengen literal.


  1. Sådan overføres strengmatrix i SQL-parameter til IN-klausul i SQL

  2. 5 måder at implementere case-usensitiv søgning i SQLite med fuld Unicode-understøttelse

  3. PLSQL JDBC:Hvordan får man sidste række-id?

  4. SQL LIKE betingelse for at kontrollere for heltal?