I MySQL, JSON_REPLACE()
funktion ersätter värden i ett JSON-dokument och returnerar resultatet.
Du anger JSON-dokumentet som det första argumentet, följt av sökvägen för att ersätta data vid, följt av värdet att ersätta det befintliga värdet med.
Du kan ersätta data på flera ställen i dokumentet om det behövs. För att göra detta, ange bara flera sökväg/värdepar efter behov.
Syntax
Syntaxen ser ut så här:
JSON_REPLACE(json_doc, sökväg, val[, sökväg, val] ...)
Där json_doc
är JSON-dokumentet, path
är sökvägen för att ersätta data vid och val
är det nya värdet för att ersätta det befintliga värdet.
Väg/värdeparen utvärderas från vänster till höger. Dokumentet som skapas genom att utvärdera ett par blir det nya värdet mot vilket nästa par utvärderas.
Om sökvägen/värdeparet inte finns i JSON-dokumentet ignoreras det och har ingen effekt.
Det första argumentet måste vara ett giltigt JSON-dokument, annars uppstår ett fel.
Även path
argumentet måste vara ett giltigt sökvägsuttryck och det får inte innehålla en *
eller **
jokertecken, annars uppstår ett fel.
Exempel 1 – Grundläggande användning
Här är ett exempel att visa.
SELECT JSON_REPLACE('{"a":1, "b":2, "c":3}', '$.b', 9) SOM 'Resultat';
Resultat:
+--------------------------------+| Resultat |+--------------------------------+| {"a":1, "b":9, "c":3} |+--------------------------------+I det här fallet ersatte vi
b
s värde med9
. Detta beror på att vi angav$.b
som det andra argumentet och9
som den tredje.Här är ett annat exempel:
SELECT JSON_REPLACE('{"Name":"Bart", "Age":10}', '$.Name', 'Nelson - Ha Ha!') AS 'Result';Resultat:
+----------------------------------------+| Resultat |+----------------------------------------+| {"Ålder":10, "Namn":"Nelson - Ha Ha!"} |+----------------------------------- -----------+Exempel 2 – Icke-existerande sökväg
Om du anger en sökväg som inte finns tas ingenting bort. Det ursprungliga JSON-dokumentet returneras utan ändringar.
SELECT JSON_REPLACE('{"Name":"Homer", "Age":39}', '$.Gender', 'Mane') AS 'Result';Resultat:
+-------------------------------------+| Resultat |+-------------------------------------+| {"Ålder":39, "Namn":"Homer"} |+-------------------------------------+Exempel 3 – Arrayer
Här är ett exempel som använder en array.
SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) SOM 'Resultat';Resultat:
+------------+| Resultat |+-----------+| [9, 2, 3] |+-----------+Matriser använder nollbaserad numrering, så i det här fallet ersätts det första elementet.
Här är ett annat exempel på array. Den här gången ersätter vi ett värde i en kapslad array.
SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) SOM 'Resultat';Resultat:
+------------------------+| Resultat |+--------------------+| [1, 2, [3, 9, 5]] |+-------------------+Exempel 4 – Flera sökvägar
Du kan ange mer än en sökväg för att ersätta data på flera ställen i JSON-dokumentet.
Grundläggande exempel:
SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) SOM 'Resultat';Resultat:
+------------------------+| Resultat |+------------------------+| [1, 9, 3, 22, 5] |+------------------------+Exempel 5 – Ett större JSON-dokument
Här är ett exempel med ett (något) större JSON-dokument.
SET @data ='{ "Person":{ "Name":"Homer", "Age":39, "Hobbys":["Äta", "Sova"] } }';SELECT JSON_REPLACE(@data , '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') SOM 'Resultat';Resultat:
+------------------------------------------------------ ----------------------------------+| Resultat |+------------------------------------------------------- ----------------------------------+| {"Person":{"Age":10, "Name":"Bart", "Hobbies":["Äta", "Base Jumping"]}} |+------- -------------------------------------------------- ------------------+