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_docer JSON-dokumentet.pather stien til det element, som den nye værdi skal indsættes for.valer 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 og 3 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() og JSON_ARRAY_APPEND() hvis du har brug for at indsætte eller tilføje data i et JSON-array.