sql >> Databasteknik >  >> RDS >> Mysql

JSON_SET() – Infoga eller uppdatera värden i ett JSON-dokument i MySQL

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 och 3 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 och JSON_REPLACE() för att endast ersätta befintliga värden.


  1. Ansluter C# till Oracle

  2. Hur använder man en SQL for loop för att infoga rader i databasen?

  3. korrekt vilolägeskommentar för byte[]

  4. Skapar sammansatt primärnyckel i SQL Server