Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JSON_QUOTE() – So maskieren Sie Zeichen in Strings, die als JSON-Werte in MySQL verwendet werden

Bei der Arbeit mit JSON und MySQL müssen Sie möglicherweise Zeichenfolgen mit Escapezeichen versehen, damit ihre Anführungszeichen die Interpretation des JSON-Dokuments nicht beeinträchtigen. In solchen Fällen können Sie JSON_QUOTE() verwenden Funktion, um potenziell problematische Zeichenfolgen zu maskieren.

JSON_QUOTE() wird verwendet, um ein gültiges JSON-String-Literal zu erzeugen, das in ein JSON-Dokument eingefügt werden kann. Sie möchten beispielsweise, dass ein Element in einem Array den Text null enthält als Zeichenfolgenliteral, anstatt einen tatsächlichen Nullwert zu haben. Diese Funktion kann verwendet werden, um sicherzustellen, dass der Text als String-Literal und nicht als Nullwert hinzugefügt wird.

Rufen Sie dazu einfach die Funktion auf, während Sie den String übergeben.

Syntax

Die Syntax lautet wie folgt:

JSON_QUOTE(string)

Wobei string ist die zu maskierende Zeichenfolge.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein Beispiel zur Veranschaulichung.

Schauen wir uns zunächst an, was passiert, wenn wir JSON_ARRAY() verwenden Funktion zum Erstellen eines Arrays.

SELECT JSON_ARRAY("Hot", "Warm", "Cold") AS 'Ergebnis';

Ergebnis:

+-------------------------+| Ergebnis |+--------------------+| ["Heiß", "Warm", "Kalt"] |+--------------------+

Das Ergebnis ist ein Array, das 3 Elemente enthält. Wir wissen, dass es sich um ein Array handelt, weil es mit einer öffnenden eckigen Klammer beginnt ([ ) und endet mit einer schließenden eckigen Klammer (] ). Wir wissen auch, dass jedes Element eine Zeichenfolge ist, weil sie von doppelten Anführungszeichen umgeben sind. Ein Komma trennt jedes Element.

Sehen wir uns nun an, was passiert, wenn wir JSON_QUOTE() verwenden stattdessen.

SELECT JSON_QUOTE('"Heiß", "Warm", "Kalt"') AS 'Ergebnis';

Ergebnis:

+-------------------------------+| Ergebnis |+------------------------------+| "\"Heiß\", \"Warm\", \"Kalt\"" |+------------------------ --+

Wir bekommen kein Array. Wir bekommen eine Schnur. Wir wissen, dass es sich um eine Zeichenfolge handelt, weil sie mit einem doppelten Anführungszeichen beginnt und endet. Alle doppelten Anführungszeichen innerhalb der Zeichenfolge werden mit dem Backslash-Zeichen maskiert (\ ).

Wenn diese Zeichen nicht maskiert wurden, wird das erste doppelte Anführungszeichen (nach Hot ) würde die Zeichenfolge versehentlich beenden. Daher könnten wir den Rest der Zeichenfolge nicht einschließen. Indem wir bestimmte Zeichen maskieren, weisen wir MySQL an, diese Zeichen nicht so zu interpretieren, wie es normalerweise der Fall wäre.

Beispiel 2 – Zahlen

Dasselbe Konzept gilt für Zahlen, außer dass Zahlen nicht in doppelte Anführungszeichen gesetzt werden.

Wir können also ein Array erstellen, das 3 Elemente enthält, die alle Zahlen sind.

SELECT JSON_ARRAY(1, 2, 3) AS 'Ergebnis';

Ergebnis:

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

Und das passiert, wenn wir zu JSON_QUOTE() wechseln Funktion.

SELECT JSON_QUOTE('[1, 2, 3]') AS 'Ergebnis';

Ergebnis:

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

Wir erhalten also dasselbe Ergebnis, außer dass das gesamte Array in doppelte Anführungszeichen gesetzt wird. Dies macht es zu einem String anstelle eines Arrays.

Beispiel 3 – Hinzufügen zu Arrays/Objekten

Wir könnten dieses String-Literal nehmen und es als Element in ein Array einfügen.

SELECT JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'), 8, 9) AS 'Ergebnis';

Ergebnis:

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

In diesem Fall ist das String-Literal das erste Element mit 8 und 9 die das zweite bzw. dritte Element sind.

Wir könnten dieses String-Literal auch in einem Objekt verwenden.

SELECT JSON_OBJECT('Key', JSON_QUOTE('[1, 2, 3]')) AS 'Ergebnis';

Ergebnis:

+---------------------+| Ergebnis |+---------------------+| {"Schlüssel":"\"[1, 2, 3]\""} |+---------------------+ 

Beispiel 4 – Extrahieren von Werten

Wenn wir also Werte aus unserem JSON-Dokument extrahieren müssen, wird es als String-Literal statt als Array interpretiert.

Zunächst einmal passiert Folgendes, wenn wir ein Array mit den drei Zahlen als separate Elemente festlegen und dann das erste Element aus dem Array extrahieren.

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

Ergebnis:

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

Dieses Array besteht also aus drei Elementen – jedes Element ist ein separates Element im Array.

Nun, hier ist, was passiert, wenn wir JSON_QUOTE() verwenden Um alle drei Zahlen und ihre eckigen Klammern in ein String-Literal umzuwandeln, fügen Sie das dem Array hinzu und extrahieren dann das erste Element des Arrays.

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

Ergebnis:

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

In diesem Fall besteht das Array also nur aus einem Element – ​​dem gesamten String-Literal.