sql >> Databasteknik >  >> RDS >> Mysql

JSON_INSERT() – Infoga värden i ett JSON-dokument i MySQL

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 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_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() och JSON_ARRAY_APPEND() om du behöver infoga eller lägga till data i en JSON-array.


  1. initiera en sqlite databas android

  2. Använda IN-satsen med en kommaavgränsad sträng från utdata från en replace() funktion i Oracle SQL

  3. Hur man partitionerar postgres-tabellen med en mellantabell

  4. Ändra en kolumn:null till inte null