I MySQL, JSON_SET()
funktion infogar eller uppdaterar värden i ett JSON-dokument och returnerar resultatet.
Du tillhandahåller JSON-dokumentet som det första argumentet, följt av sökvägen att infoga i, följt av värdet som ska infogas. Du kan ange flera sökväg/värdepar om du behöver uppdatera flera värden.
Syntax
Syntaxen ser ut så här:
JSON_SET(json_doc, sökväg, val[, sökväg, val] ...)
Var:
json_doc
är JSON-dokumentet.path
är sökvägen till elementet för vilket data ska infogas eller uppdateras värdet på.val
är det nya 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.
Ett fel uppstår om det första argumentet inte är ett giltigt JSON-dokument, eller om något sökvägsargument inte är ett giltigt sökvägsuttryck eller innehåller en *
eller **
jokertecken.
Exempel 1 – Infoga ett värde
Här är ett exempel för att visa hur man infogar ett värde med den här funktionen.
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';
Resultat:
+--------------------------------+| Resultat |+--------------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+I det här fallet infogas det 3:e argumentet i arrayen vid den angivna sökvägen. Jag använder
$.c
för sökvägen och3
för värdet som ska infogas. Detta resulterar i ett nyckel/värdepar av"c": 3
.Här är ett annat exempel:
SELECT JSON_SET('{"Namn":"Homer", "Kön":"Man"}', '$.Age', 39) SOM 'Resultat';Resultat:
+------------------------------------------------------ --+| Resultat |+------------------------------------------------------ -+| {"Ålder":39, "Namn":"Homer", "Kön":"Man"} |+-------------------------------- ----------------------------+Exempel 2 – Uppdatera ett värde
Det föregående exemplet infogade ett värde. Det här exemplet uppdaterar ett befintligt värde.
SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":3} |+------------------------+Här är ett annat exempel:
SELECT JSON_SET('{"Namn":"Homer", "Kön":"Man"}', '$.Name', "Bart") SOM 'Resultat';Resultat:
+--------------------------------------------+| Resultat |+--------------------------------------------+| {"Name":"Bart", "Gender":"Mane"} |+-------------------------------------- -----+Exempel 3 – Arrayer
Du kan infoga värden i en matris genom att använda en sökväg förbi slutet av den befintliga matrisen. Exempel:
SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) SOM 'Resultat';Resultat:
+--------------+| Resultat |+--------------+| [1, 2, 3, 4] |+--------------------+Men om du använder en sökväg som redan finns i arrayen kommer värdet att uppdateras:
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) SOM 'Resultat';Resultat:
+------------+| Resultat |+-----------+| [1, 4, 3] |+-----------+Om det befintliga värdet inte är en array, lindas det automatiskt som en array och utökas sedan med det nya värdet. Exempel:
SELECT JSON_SET('{"a":1, "b":2}', '$[2]', 3) SOM 'Resultat';Resultat:
+------------------------------+| Resultat |+------------------------------+| [{"a":1, "b":2}, 3] |+-----------------------------+Exempel 4 – Flera värden
Du kan infoga/uppdatera flera värden samtidigt. Lägg bara till varje nyckel/värdepar separerade med kommatecken. Exempel:
SELECT JSON_SET('{"a":1, "b":2, "c":3}', '$.a', 9, '$.c', 'Bart') SOM 'Resultat';Resultat:
+--------------------------------------+| Resultat |+--------------------------------------+| {"a":9, "b":2, "c":"Bart"} |+-------------------------------- ----+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", "Hobbies":["Äta", "Sova"] } }';SELECT JSON_SET(@data, '$.Person. Name', 'Bart', '$.Person.Hobbies[1]', "Og") AS 'Result';Resultat:
+------------------------------------------------------ ------------------+| Resultat |+------------------------------------------------------ ------------------+| {"Person":{"Namn":"Bart", "Hobbies":["Äta", "Osäg"]}} |+------------------- ------------------------------------------------------+Se även
JSON_INSERT()
för att infoga värden utan att ersätta befintliga värden ochJSON_REPLACE()
för att endast ersätta befintliga värden.