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 med 9 . Dette skyldes, at vi har angivet $.b som det andet argument, og 9 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"]}} |+------- -------------------------------------------------- ------------------+