Dans MySQL, il existe un certain nombre de fonctions pour vous aider à travailler avec des documents JSON. Ceux-ci incluent JSON_SET() , JSON_INSERT() , et JSON_REPLACE() fonctions.
Ces trois fonctions sont liées, mais elles diffèrent légèrement.
Syntaxe
Tout d'abord, voici la syntaxe des trois fonctions :
JSON_SET(json_doc, chemin, val[, chemin, val] ...)JSON_INSERT(json_doc, chemin, val[, chemin, val] ...)JSON_REPLACE(json_doc, chemin, val[, chemin, val] ...)
Les trois fonctions acceptent donc les mêmes arguments. Voici à quoi servent ces arguments :
json_docest le document JSON.pathest le chemin de l'élément pour lequel insérer des données ou mettre à jour la valeur.valest la nouvelle valeur.
La différence
Voici la différence entre ces fonctions :
JSON_SET()remplace les valeurs existantes et ajoute des valeurs inexistantes.JSON_INSERT()insère des valeurs sans remplacer les valeurs existantes.JSON_REPLACE()remplace uniquement les valeurs existantes.
Donc, fondamentalement, celui que vous utilisez dépend si vous mettez à jour une valeur existante ou en insérez une nouvelle (bien que JSON_SET() fait les deux).
Exemple 1 - Insérer une valeur
Voici des exemples pour démontrer la différence entre ces trois fonctions.
JSON_SET()
Voici ce qui se passe si nous essayons d'insérer une nouvelle valeur en utilisant JSON_SET() :
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) AS 'Résultat' ; Résultat :
+-----------------------------------+| Résultat |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+
Cela a donc parfaitement fonctionné.
JSON_INSERT()
Voici ce qui se passe si nous essayons d'insérer une nouvelle valeur en utilisant JSON_INSERT() :
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) AS 'Résultat' ;
Résultat :
+-----------------------------------+| Résultat |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+
Exactement le même résultat qu'avec JSON_SET() .
JSON_REPLACE()
Voici ce qui se passe si nous essayons d'insérer une nouvelle valeur en utilisant JSON_REPLACE() :
SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) AS 'Résultat' ;
Résultat :
+------------------+| Résultat |+------------------+| {"a":1, "b":2} |+------------------+
Dans ce cas, la nouvelle valeur n'a pas été insérée. Le document JSON d'origine est renvoyé tel quel. En effet, cette fonction remplace uniquement les valeurs existantes - elle n'en insère pas de nouvelles.
Exemple 2 - Mettre à jour une valeur existante
Maintenant, pour mettre à jour les valeurs existantes.
JSON_SET()
Voici ce qui se passe si nous essayons de mettre à jour une valeur existante en utilisant JSON_SET() :
SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) AS 'Résultat' ;
Résultat :
+------------------+| Résultat |+------------------+| {"a":1, "b":3} |+-----------------+
Donc encore une fois, cela a parfaitement fonctionné. Nous avons réussi à mettre à jour la deuxième paire clé/valeur avec la nouvelle valeur.
JSON_INSERT()
Voici ce qui se passe si nous essayons de mettre à jour une valeur existante en utilisant JSON_INSERT() :
SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) AS 'Résultat' ;
Résultat :
+------------------+| Résultat |+------------------+| {"a":1, "b":2} |+------------------+
Dans ce cas, la valeur existante n'a pas été mise à jour. Le document JSON est renvoyé tel quel. C'est parce que le JSON_INSERT() la fonction insère uniquement de nouvelles valeurs - elle ne met pas à jour les valeurs existantes.
JSON_REPLACE()
Voici ce qui se passe si nous essayons de mettre à jour une valeur existante en utilisant JSON_REPLACE() :
SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) AS 'Résultat' ;
Résultat :
+------------------+| Résultat |+------------------+| {"a":1, "b":3} |+-----------------+
Il se met à jour parfaitement.