I MySQL er JSON_SET()
funktion indsætter eller opdaterer værdier i et JSON-dokument og returnerer resultatet.
Du angiver JSON-dokumentet som det første argument, efterfulgt af stien, der skal indsættes i, efterfulgt af værdien, der skal indsættes. Du kan angive flere sti/værdi-par, hvis du har brug for at opdatere flere værdier.
Syntaks
Syntaksen ser sådan ud:
JSON_SET(json_doc, sti, val[, sti, val] ...)
Hvor:
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.
Sti-værdi-parrene evalueres fra venstre mod højre. Dokumentet, der produceres ved at evaluere et par, bliver den nye værdi, som det næste par evalueres i forhold til.
Der opstår en fejl, hvis det første argument ikke er et gyldigt JSON-dokument, eller hvis et sti-argument ikke er et gyldigt stiudtryk eller indeholder en *
eller **
jokertegn.
Eksempel 1 – Indsæt en værdi
Her er et eksempel for at demonstrere, hvordan man indsætter en værdi ved hjælp af denne funktion.
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';
Resultat:
+--------------------------------+| Resultat |+---------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+I dette tilfælde indsættes det 3. argument i arrayet ved den angivne sti. Jeg bruger
$.c
for stien og3
for den værdi, der skal indsættes. Dette resulterer i et nøgle/værdi-par af"c": 3
.Her er et andet eksempel:
SELECT JSON_SET('{"Navn":"Homer", "Køn":"Mand"}', '$.Alder', 39) SOM 'Resultat';Resultat:
+---------------------------------------------- --+| Resultat |+----------------------------------------------- -+| {"Alder":39, "Navn":"Homer", "Køn":"Mand"} |+-------------------------------- ----------------------------+Eksempel 2 – Opdater en værdi
Det forrige eksempel indsatte en værdi. Dette eksempel opdaterer en eksisterende værdi.
SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":3} |+------------------------+Her er et andet eksempel:
SELECT JSON_SET('{"Navn":"Homer", "Køn":"Mand"}', '$.Name', "Bart") SOM 'Resultat';Resultat:
+--------------------------------------------+| Resultat |+--------------------------------------------+| {"Navn":"Bart", "Køn":"Mand"} |+-------------------------------------- -----+Eksempel 3 – Arrays
Du kan indsætte værdier i en matrix ved at bruge en sti forbi enden af den eksisterende matrix. Eksempel:
SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) SOM 'Resultat';Resultat:
+--------------+| Resultat |+--------------+| [1, 2, 3, 4] |+--------------+Men hvis du bruger en sti, der allerede findes i arrayet, vil værdien blive opdateret:
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) SOM 'Resultat';Resultat:
+------------+| Resultat |+-----------+| [1, 4, 3] |+-----------+Hvis den eksisterende værdi ikke er en matrix, pakkes den automatisk som en matrix og udvides derefter med den nye værdi. Eksempel:
SELECT JSON_SET('{"a":1, "b":2}', '$[2]', 3) SOM 'Resultat';Resultat:
+------------------------------+| Resultat |+------------------------------+| [{"a":1, "b":2}, 3] |+-----------------------------+Eksempel 4 – Flere værdier
Du kan indsætte/opdatere flere værdier på én gang. Du skal blot tilføje hvert nøgle/værdi-par adskilt af et komma. Eksempel:
SELECT JSON_SET('{"a":1, "b":2, "c":3}', '$.a', 9, '$.c', 'Bart') SOM 'Resultat';Resultat:
+---------------------------------------+| Resultat |+--------------------------------------+| {"a":9, "b":2, "c":"Bart"} |+-------------------------------- ----+Eksempel 5 – Et større JSON-dokument
Her er et eksempel med et (lidt) større JSON-dokument.
SET @data ='{ "Person":{ "Navn":"Homer", "Hobbyer":["Spise", "Sover"] } }';SELECT JSON_SET(@data, '$.Person. Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';Resultat:
+---------------------------------------------- -------------------+| Resultat |+----------------------------------------------- ------------------+| {"Person":{"Navn":"Bart", "Hobbyer":["Spise", "Fortræd"]}} |+------------------- ------------------------------------------------------+Se også
JSON_INSERT()
for at indsætte værdier uden at erstatte eksisterende værdier, ogJSON_REPLACE()
til kun at erstatte eksisterende værdier.