I MySQL er der en række funktioner, der hjælper dig med at arbejde med JSON-dokumenter. Disse inkluderer JSON_SET() , JSON_INSERT() og JSON_REPLACE() funktioner.
Disse tre funktioner er relaterede, men de adskiller sig en smule.
Syntaks
For det første er her syntaksen for alle tre funktioner:
JSON_SET(json_doc, path, val[, path, val] ...)JSON_INSERT(json_doc, path, val[, path, val] ...)JSON_REPLACE(json_doc, path, val[, path, val] ...)
Så alle tre funktioner accepterer de samme argumenter. Her er, hvad disse argumenter er til:
json_docer JSON-dokumentet.pather stien til det element, som der skal indsættes data for eller opdatere værdien ved.valer den nye værdi.
Forskellen
Her er forskellen mellem disse funktioner:
JSON_SET()erstatter eksisterende værdier og tilføjer ikke-eksisterende værdier.JSON_INSERT()indsætter værdier uden at erstatte eksisterende værdier.JSON_REPLACE()erstatter kun eksisterende værdier.
Så dybest set, hvilken en du bruger afhænger af, om du opdaterer en eksisterende værdi eller indsætter en ny (selvom JSON_SET() gør begge dele).
Eksempel 1 – Indsæt en værdi
Her er eksempler for at demonstrere forskellen mellem disse tre funktioner.
JSON_SET()
Her er, hvad der sker, hvis vi forsøger at indsætte en ny værdi ved hjælp af JSON_SET() :
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat'; Resultat:
+--------------------------------+| Resultat |+---------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+
Så det fungerede perfekt.
JSON_INSERT()
Her er, hvad der sker, hvis vi forsøger at indsætte en ny værdi ved hjælp af JSON_INSERT() :
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';
Resultat:
+--------------------------------+| Resultat |+---------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+
Præcis det samme resultat som med JSON_SET() .
JSON_REPLACE()
Her er, hvad der sker, hvis vi forsøger at indsætte en ny værdi ved hjælp af JSON_REPLACE() :
SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":2} |+------------------------+
I dette tilfælde blev den nye værdi ikke indsat. Det originale JSON-dokument returneres uændret. Dette skyldes, at denne funktion kun erstatter eksisterende værdier - den indsætter ikke nye.
Eksempel 2 – Opdater en eksisterende værdi
Nu til opdatering af eksisterende værdier.
JSON_SET()
Her er, hvad der sker, hvis vi forsøger at opdatere en eksisterende værdi ved hjælp af JSON_SET() :
SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":3} |+------------------------+
Så igen fungerede det perfekt. Vi har opdateret det andet nøgle/værdi-par med den nye værdi.
JSON_INSERT()
Her er, hvad der sker, hvis vi forsøger at opdatere en eksisterende værdi ved hjælp af JSON_INSERT() :
SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":2} |+------------------------+
I dette tilfælde blev den eksisterende værdi ikke opdateret. JSON-dokumentet returneres uændret. Dette skyldes, at JSON_INSERT() funktion indsætter kun nye værdier – den opdaterer ikke eksisterende.
JSON_REPLACE()
Her er, hvad der sker, hvis vi forsøger at opdatere en eksisterende værdi ved hjælp af JSON_REPLACE() :
SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';
Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":3} |+------------------------+
Den opdaterer perfekt.