I MySQL er JSON_REPLACE()
funktion erstatter værdier i et JSON-dokument og returnerer resultatet.
Du angiver JSON-dokumentet som det første argument, efterfulgt af stien til at erstatte data på, efterfulgt af værdien, der skal erstatte den eksisterende værdi med.
Du kan erstatte data flere steder i dokumentet, hvis det kræves. For at gøre dette skal du blot angive flere sti/værdi-par efter behov.
Syntaks
Syntaksen ser sådan ud:
JSON_REPLACE(json_doc, sti, val[, sti, val] ...)
Hvor json_doc
er JSON-dokumentet, path
er stien til at erstatte dataene ved og val
er den nye værdi, der erstatter den eksisterende værdi.
Sti/værdi-parrene evalueres fra venstre mod højre. Dokumentet fremstillet ved at evaluere et par bliver den nye værdi, som det næste par evalueres i forhold til.
Hvis stien/værdiparret ikke findes i JSON-dokumentet, ignoreres det og har ingen effekt.
Det første argument skal være et gyldigt JSON-dokument, ellers opstår der en fejl.
Også path
argumentet skal være et gyldigt stiudtryk, og det må ikke indeholde en *
eller **
jokertegn, ellers vil der opstå en fejl.
Eksempel 1 – Grundlæggende brug
Her er et eksempel til at demonstrere.
SELECT JSON_REPLACE('{"a":1, "b":2, "c":3}', '$.b', 9) SOM 'Resultat';
Resultat:
+--------------------------------+| Resultat |+---------------------------+| {"a":1, "b":9, "c":3} |+--------------------------------+I dette tilfælde erstattede vi
b
's værdi med9
. Dette skyldes, at vi har angivet$.b
som det andet argument, og9
som den tredje.Her er et andet eksempel:
SELECT JSON_REPLACE('{"Navn":"Bart", "Alder":10}', '$.Name', 'Nelson - Ha Ha!') SOM 'Resultat';Resultat:
+----------------------------------------+| Resultat |+----------------------------------------+| {"Alder":10, "Navn":"Nelson - Ha Ha!"} |+----------------------------------- -----------+Eksempel 2 – Ikke-eksisterende sti
Hvis du angiver en sti, der ikke eksisterer, fjernes intet. Det originale JSON-dokument returneres uden ændringer.
SELECT JSON_REPLACE('{"Navn":"Homer", "Alder":39}', '$.Køn', 'Mand') SOM 'Resultat';Resultat:
+--------------------------------------+| Resultat |+-------------------------------------+| {"Alder":39, "Navn":"Homer"} |+------------------------------------+Eksempel 3 – Arrays
Her er et eksempel, hvor du bruger et array.
SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) SOM 'Resultat';Resultat:
+------------+| Resultat |+-----------+| [9, 2, 3] |+------------+Arrays bruger nul-baseret nummerering, så i dette tilfælde erstattes det første element.
Her er et andet array-eksempel. Denne gang erstatter vi en værdi i et indlejret array.
SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) SOM 'Resultat';Resultat:
+------------------------+| Resultat |+--------------------+| [1, 2, [3, 9, 5]] |+--------------------+Eksempel 4 – Flere stier
Du kan angive mere end én sti for at erstatte data flere steder i JSON-dokumentet.
Grundlæggende eksempel:
SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) SOM 'Resultat';Resultat:
+------------------------+| Resultat |+------------------------+| [1, 9, 3, 22, 5] |+------------------------+Eksempel 5 – Et større JSON-dokument
Her er et eksempel med et (lidt) større JSON-dokument.
SET @data ='{ "Person":{ "Navn":"Homer", "Alder":39, "Hobbyer":["Spise", "Sover"] } }';SELECT JSON_REPLACE(@data , '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') SOM 'Resultat';Resultat:
+---------------------------------------------- ----------------------------------+| Resultat |+------------------------------------------------------ ----------------------------------+| {"Person":{"Alder":10, "Navn":"Bart", "Hobbyer":["Spise", "Base Jumping"]}} |+------- -------------------------------------------------- ------------------+