sql >> Databasteknik >  >> RDS >> Mysql

JSON_QUOTE() – Hur man undslipper tecken i strängar som används som JSON-värden i MySQL

När du arbetar med JSON och MySQL kan du ibland behöva undkomma strängar så att deras citattecken inte stör tolkningen av JSON-dokumentet. I sådana fall kan du använda JSON_QUOTE() funktion för att undkomma potentiellt problematiska strängar.

JSON_QUOTE() används för att skapa en giltig JSON-strängliteral som kan inkluderas i ett JSON-dokument. Till exempel kanske du vill att ett element i en array ska ha texten null som en bokstavlig sträng, snarare än att ha ett verkligt nollvärde. Den här funktionen kan användas för att säkerställa att texten läggs till som en bokstavlig sträng snarare än ett nollvärde.

För att använda den, ring helt enkelt funktionen medan du skickar in strängen.

Syntax

Syntaxen ser ut så här:

JSON_QUOTE(sträng)

Där string är strängen som ska escapes.

Exempel 1 – Grundläggande användning

Här är ett exempel att visa.

Låt oss först titta på vad som händer när vi använder JSON_ARRAY() funktion för att skapa en array.

VÄLJ JSON_ARRAY("Varm", "Varm", "Kall") SOM 'Resultat';

Resultat:

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

Resultatet är en array som innehåller 3 element. Vi vet att det är en array eftersom den börjar med en hakparentes ([) ) och slutar med en avslutande hakparentes (] ). Vi vet också att varje element är en sträng, eftersom de är omgivna av dubbla citattecken. Ett kommatecken skiljer varje element åt.

Låt oss nu se vad som händer när vi använder JSON_QUOTE() istället.

VÄLJ JSON_QUOTE('"Varm", "Varm", "Kall"') SOM 'Resultat';

Resultat:

+--------------------------------------+| Resultat |+--------------------------------------+| "\"Varm\", \"Varm\", \"Kall\"" |+---------------------------------------- --+

Vi får ingen array. Vi får ett snöre. Vi vet att det är en sträng eftersom den börjar och slutar med ett dubbelt citattecken. Alla dubbla citattecken inom strängen är escaped med omvänt snedstreck (\ ).

Om dessa tecken inte var escaped, det första dubbla citattecken (efter Hot ) skulle oavsiktligt avsluta strängen. Därför skulle vi inte kunna inkludera resten av strängen. Genom att undkomma vissa karaktärer säger vi till MySQL att inte tolka dessa karaktärer som det normalt skulle göra.

Exempel 2 – Siffror

Samma koncept gäller för siffror, förutom att siffror inte omges av citattecken.

Så vi kan skapa en array som innehåller 3 element, som alla är siffror.

VÄLJ JSON_ARRAY(1, 2, 3) SOM 'Resultat';

Resultat:

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

Och här är vad som händer om vi byter till JSON_QUOTE() funktion.

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

Resultat:

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

Så vi får samma resultat, förutom att hela arrayen är omgiven av dubbla citattecken. Detta gör det till en sträng istället för en array.

Exempel 3 – Lägga till i arrayer/objekt

Vi kan ta den här strängen bokstavligt och lägga till den som ett element i en array.

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

Resultat:

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

I det här fallet är strängen literal det första elementet, med 8 och 9 är det andra respektive tredje elementet.

Vi kan också använda den här strängen bokstavlig i ett objekt.

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

Resultat:

+--------------------------------+| Resultat |+--------------------------------+| {"Key":"\"[1, 2, 3]\""} |+--------------------------------+ 

Exempel 4 – Extrahera värden

Så om vi behöver extrahera värden från vårt JSON-dokument kommer det att tolkas som en bokstavlig sträng istället för en array.

Först, här är vad som händer om vi ställer in en array med de tre talen som separata element och sedan extraherar det första elementet från arrayen.

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å denna array består av tre element – ​​varje element är ett separat element i arrayen.

Nu är det här vad som händer om vi använder JSON_QUOTE() för att få alla tre siffror och deras hakparenteser omvandlade till en bokstavlig sträng, lägg till det i arrayen och extrahera sedan det första elementet i arrayen.

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 det här fallet består arrayen bara av ett element – ​​hela strängen literal.


  1. Vad är databasberoenden?

  2. Vad är en genererad kolumn?

  3. Fylla i en PL/SQL-tabell från ett block i Oracle D2k Forms

  4. Hur man aktiverar alla CHECK &främmande nyckelbegränsningar för en tabell i SQL Server (T-SQL-exempel)