I MySQL er JSON_INSERT()
funktion indsætter en værdi 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.
Syntaks
Syntaksen ser sådan ud:
JSON_INSERT(json_doc, sti, val[, sti, val] ...)
Hvor:
json_doc
er JSON-dokumentet.path
er stien til det element, som den nye værdi skal indsættes for.val
er den nye værdi, der vil blive indsat.
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.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';
Resultat:
+--------------------------------+| Resultat |+---------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+Så det 3. argument indsættes i arrayet ved den angivne sti. I dette tilfælde bruger jeg
$.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_INSERT('{"Navn":"Homer", "Køn":"Mand"}', '$.Alder', 39) SOM 'Resultat';Resultat:
+---------------------------------------------- --+| Resultat |+----------------------------------------------- -+| {"Alder":39, "Navn":"Homer", "Køn":"Mand"} |+-------------------------------- ----------------------------+Eksempel 2 – Forsøger at overskrive en eksisterende sti
Et sti-værdi-par for en eksisterende sti i dokumentet ignoreres og overskriver ikke den eksisterende dokumentværdi.
Så hvis vi ændrer det forrige eksempel til at indsætte en værdi ved
Name
(som allerede eksisterer), sker der ingen indsættelse:SELECT JSON_INSERT('{"Navn":"Homer", "Køn":"Mand"}', '$.Name', "Bart") SOM 'Resultat';Resultat:
+--------------------------------------------+| Resultat |+---------------------------------------------+| {"Navn":"Homer", "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_INSERT('[1, 2, 3]', '$[3]', 4) SOM 'Resultat';Resultat:
+--------------+| Resultat |+--------------+| [1, 2, 3, 4] |+--------------+Men hvis du bruger en sti, der allerede findes i arrayet, forbliver arrayet uændret:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) SOM 'Resultat';Resultat:
+------------+| Resultat |+-----------+| [1, 2, 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_INSERT('{"a":1, "b":2}', '$[2]', 3) SOM 'Resultat';Resultat:
+------------------------------+| Resultat |+------------------------------+| [{"a":1, "b":2}, 3] |+-----------------------------+Men igen, hvis du forsøger at indsætte en værdi på en sti, der allerede eksisterer, forbliver JSON-dokumentet uændret:
SELECT JSON_INSERT('{"a":1, "b":2}', '$[0]', 3) SOM 'Resultat';Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":2} |+------------------------+Eksempel 4 – 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_INSERT(@data, '$.Person. Hobbyer[2]', "Base Jumping") AS 'Resultat';Resultat:
+---------------------------------------------- ------------------------------------+| Resultat |+------------------------------------------------------ -----------------------------------+| {"Person":{"Name":"Homer", "Hobbyer":["Spise", "Sover", "Base Jumping"]}} |+-------- -------------------------------------------------- ------------------+Se også
JSON_ARRAY_INSERT()
ogJSON_ARRAY_APPEND()
hvis du har brug for at indsætte eller tilføje data i et JSON-array.