Lorsque vous travaillez avec JSON et MySQL, vous devrez parfois échapper des chaînes afin que leurs guillemets n'interfèrent pas avec l'interprétation du document JSON. Dans de tels cas, vous pouvez utiliser le JSON_QUOTE()
fonction pour échapper aux chaînes potentiellement problématiques.
JSON_QUOTE()
est utilisé pour produire un littéral de chaîne JSON valide qui peut être inclus dans un document JSON. Par exemple, vous pouvez souhaiter qu'un élément d'un tableau contienne le texte null
comme un littéral de chaîne, plutôt que d'avoir une valeur nulle réelle. Cette fonction peut être utilisée pour s'assurer que le texte est ajouté en tant que littéral de chaîne, plutôt qu'en tant que valeur nulle.
Pour l'utiliser, il suffit d'appeler la fonction en passant la chaîne.
Syntaxe
La syntaxe ressemble à ceci :
JSON_QUOTE(chaîne)
Où string
est la chaîne à échapper.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
Tout d'abord, regardons ce qui se passe lorsque nous utilisons le JSON_ARRAY()
fonction pour créer un tableau.
SELECT JSON_ARRAY("Chaud", "Chaud", "Froid") AS 'Résultat' ;
Résultat :
+-------------------------+| Résultat |+-------------------------+| ["Chaud", "Chaud", "Froid"] |+-------------------------+
Le résultat est un tableau qui contient 3 éléments. Nous savons que c'est un tableau car il commence par un crochet ouvrant ([
) et se termine par un crochet fermant (]
). Nous savons également que chaque élément est une chaîne, car ils sont entourés de guillemets doubles. Une virgule sépare chaque élément.
Voyons maintenant ce qui se passe lorsque nous utilisons le JSON_QUOTE()
à la place.
SELECT JSON_QUOTE('"Chaud", "Chaud", "Froid"') AS 'Résultat' ;
Résultat :
+---------------------------------------------+| Résultat |+-------------------------------+| "\"Chaud\", \"Chaud\", \"Froid\"" |+----------------------------- --+
Nous n'obtenons pas de tableau. Nous obtenons une chaîne. Nous savons qu'il s'agit d'une chaîne car elle commence et se termine par un guillemet double. Tous les guillemets doubles dans la chaîne sont échappés avec le caractère barre oblique inverse (\
).
Si ces caractères n'ont pas été échappés, le premier guillemet double (après Hot
) terminerait par inadvertance la chaîne. Par conséquent, nous ne pourrions pas inclure le reste de la chaîne. En échappant certains caractères, nous disons à MySQL de ne pas interpréter ces caractères comme il le ferait normalement.
Exemple 2 – Chiffres
Le même concept s'applique aux nombres, sauf que les nombres ne sont pas entre guillemets doubles.
Nous pouvons donc créer un tableau contenant 3 éléments, qui sont tous des nombres.
SELECT JSON_ARRAY(1, 2, 3) AS 'Résultat' ;
Résultat :
+-----------+| Résultat |+-----------+| [1, 2, 3] |+-----------+
Et voici ce qui se passe si nous passons au JSON_QUOTE()
fonction.
SELECT JSON_QUOTE('[1, 2, 3]') AS 'Résultat' ;
Résultat :
+-------------+| Résultat |+-------------+| "[1, 2, 3]" |+-------------+
Nous obtenons donc le même résultat, sauf que tout le tableau est entouré de guillemets doubles. Cela en fait une chaîne au lieu d'un tableau.
Exemple 3 – Ajout à des tableaux/objets
Nous pourrions prendre cette chaîne littérale et l'ajouter en tant qu'élément dans un tableau.
SELECT JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'), 8, 9) AS 'Résultat' ;
Résultat :
+-------------------------+| Résultat |+-------------------------+| ["\"[1, 2, 3]\"", 8, 9] |+-------------------------+
Dans ce cas, le littéral de chaîne est le premier élément, avec 8
et 9
étant respectivement les deuxième et troisième éléments.
Nous pourrions également utiliser ce littéral de chaîne dans un objet.
SELECT JSON_OBJECT('Clé', JSON_QUOTE('[1, 2, 3]')) AS 'Résultat' ;
Résultat :
+-----------------------------------+| Résultat |+--------------------------+| {"Clé":"\"[1, 2, 3]\""} |+--------------------------+Exemple 4 - Extraction de valeurs
Donc, si nous devons extraire des valeurs de notre document JSON, il sera interprété comme une chaîne littérale au lieu d'un tableau.
Tout d'abord, voici ce qui se passe si nous définissons un tableau avec les trois nombres comme éléments séparés, puis extrayons le premier élément du tableau.
SET @data1 =JSON_ARRAY(1, 2, 3);SELECT @data1 AS '@data1', JSON_EXTRACT(@data1, '$[0]');Résultat :
+-----------+------------------------------+| @données1 | JSON_EXTRACT(@data1, '$[0]') |+-----------+------------------------ ------+| [1, 2, 3] | 1 |+-----------+------------------------------+Donc, ce tableau se compose de trois éléments - chaque élément est un élément distinct dans le tableau.
Maintenant, voici ce qui se passe si nous utilisons
JSON_QUOTE()
pour que les trois nombres et leurs crochets soient convertis en un littéral de chaîne, ajoutez-le au tableau, puis extrayez le premier élément du tableau.SET @data2 =JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'));SELECT @data2 AS '@data2', JSON_EXTRACT(@data2, '$[0]');Résultat :
+-------------------+-------------------------- ----+| @données2 | JSON_EXTRACT(@data2, '$[0]') |+-------------------+---------------- --------------+| ["\"[1, 2, 3]\""] | "\"[1, 2, 3]\"" |+------------------------------+--------------- ---------------+Ainsi, dans ce cas, le tableau se compose d'un seul élément :l'intégralité du littéral de chaîne.