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_doc
er JSON-dokumentet.path
er stien til det element, som der skal indsættes data for eller opdatere værdien ved.val
er 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.