I MySQL, JSON_INSERT()
funktion infogar ett värde i ett JSON-dokument och returnerar resultatet.
Du anger JSON-dokumentet som det första argumentet, följt av sökvägen att infoga i, följt av värdet som ska infogas.
Syntax
Syntaxen ser ut så här:
JSON_INSERT(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 det nya värdet ska infogas.val
är det nya värdet som kommer att infogas.
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.
Exempel 1 – Grundläggande användning
Här är ett exempel att visa.
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';
Resultat:
+--------------------------------+| Resultat |+--------------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+Så det 3:e argumentet infogas i arrayen vid den angivna sökvägen. I det här fallet använder jag
$.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_INSERT('{"Namn":"Homer", "Kön":"Man"}', '$.Age', 39) SOM 'Resultat';Resultat:
+------------------------------------------------------ --+| Resultat |+------------------------------------------------------ -+| {"Ålder":39, "Namn":"Homer", "Kön":"Man"} |+-------------------------------- ----------------------------+Exempel 2 – Försöker skriva över en befintlig sökväg
Ett sökväg-värdepar för en befintlig sökväg i dokumentet ignoreras och skriver inte över det befintliga dokumentvärdet.
Så om vi modifierar föregående exempel för att infoga ett värde vid
Name
(som redan finns), ingen infogning sker:SELECT JSON_INSERT('{"Namn":"Homer", "Kön":"Man"}', '$.Name', "Bart") SOM 'Resultat';Resultat:
+---------------------------------------------+| Resultat |+---------------------------------------------+| {"Name":"Homer", "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_INSERT('[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 arrayen att förbli oförändrad:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) SOM 'Resultat';Resultat:
+------------+| Resultat |+-----------+| [1, 2, 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_INSERT('{"a":1, "b":2}', '$[2]', 3) SOM 'Resultat';Resultat:
+------------------------------+| Resultat |+------------------------------+| [{"a":1, "b":2}, 3] |+-----------------------------+Men återigen, om du försöker infoga ett värde på en sökväg som redan finns, förblir JSON-dokumentet oförändrat:
SELECT JSON_INSERT('{"a":1, "b":2}', '$[0]', 3) SOM 'Resultat';Resultat:
+------------------------+| Resultat |+------------------------+| {"a":1, "b":2} |+------------------------+Exempel 4 – 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_INSERT(@data, '$.Person. Hobbies[2]', "Base Jumping") AS 'Result';Resultat:
+------------------------------------------------------ ------------------------------------+| Resultat |+------------------------------------------------------- ----------------------------------+| {"Person":{"Name":"Homer", "Hobbies":["Äta", "Sova", "Base Jumping"]}} |+-------- -------------------------------------------------- ------------------+Se även
JSON_ARRAY_INSERT()
ochJSON_ARRAY_APPEND()
om du behöver infoga eller lägga till data i en JSON-array.