sql >> Database teknologi >  >> RDS >> Mysql

JSON_SET() – Indsæt eller opdater værdier i et JSON-dokument i MySQL

I MySQL er JSON_SET() funktion indsætter eller opdaterer værdier i et JSON-dokument og returnerer resultatet.

Du angiver JSON-dokumentet som det første argument, efterfulgt af stien, der skal indsættes i, efterfulgt af værdien, der skal indsættes. Du kan angive flere sti/værdi-par, hvis du har brug for at opdatere flere værdier.

Syntaks

Syntaksen ser sådan ud:

JSON_SET(json_doc, sti, val[, sti, val] ...)

Hvor:

  • json_doc er JSON-dokumentet.
  • path er stien til det element, som der skal indsættes data for eller opdatere værdien ved.
  • val er den nye værdi.

Sti-værdi-parrene evalueres fra venstre mod højre. Dokumentet, der produceres ved at evaluere et par, bliver den nye værdi, som det næste par evalueres i forhold til.

Der opstår en fejl, hvis det første argument ikke er et gyldigt JSON-dokument, eller hvis et sti-argument ikke er et gyldigt stiudtryk eller indeholder en * eller ** jokertegn.

Eksempel 1 – Indsæt en værdi

Her er et eksempel for at demonstrere, hvordan man indsætter en værdi ved hjælp af denne funktion.

SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) SOM 'Resultat';

Resultat:

+--------------------------------+| Resultat |+---------------------------+| {"a":1, "b":2, "c":3} |+--------------------------------+ 

I dette tilfælde indsættes det 3. argument i arrayet ved den angivne sti. Jeg bruger $.c for stien og 3 for den værdi, der skal indsættes. Dette resulterer i et nøgle/værdi-par af "c": 3 .

Her er et andet eksempel:

SELECT JSON_SET('{"Navn":"Homer", "Køn":"Mand"}', '$.Alder', 39) SOM 'Resultat';

Resultat:

+---------------------------------------------- --+| Resultat |+----------------------------------------------- -+| {"Alder":39, "Navn":"Homer", "Køn":"Mand"} |+-------------------------------- ----------------------------+

Eksempel 2 – Opdater en værdi

Det forrige eksempel indsatte en værdi. Dette eksempel opdaterer en eksisterende værdi.

SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) SOM 'Resultat';

Resultat:

+------------------------+| Resultat |+------------------------+| {"a":1, "b":3} |+------------------------+

Her er et andet eksempel:

SELECT JSON_SET('{"Navn":"Homer", "Køn":"Mand"}', '$.Name', "Bart") SOM 'Resultat';

Resultat:

+--------------------------------------------+| Resultat |+--------------------------------------------+| {"Navn":"Bart", "Køn":"Mand"} |+-------------------------------------- -----+

Eksempel 3 – Arrays

Du kan indsætte værdier i en matrix ved at bruge en sti forbi enden af ​​den eksisterende matrix. Eksempel:

SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) SOM 'Resultat';

Resultat:

+--------------+| Resultat |+--------------+| [1, 2, 3, 4] |+--------------+

Men hvis du bruger en sti, der allerede findes i arrayet, vil værdien blive opdateret:

SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) SOM 'Resultat';

Resultat:

+------------+| Resultat |+-----------+| [1, 4, 3] |+-----------+

Hvis den eksisterende værdi ikke er en matrix, pakkes den automatisk som en matrix og udvides derefter med den nye værdi. Eksempel:

SELECT JSON_SET('{"a":1, "b":2}', '$[2]', 3) SOM 'Resultat';

Resultat:

+------------------------------+| Resultat |+------------------------------+| [{"a":1, "b":2}, 3] |+-----------------------------+

Eksempel 4 – Flere værdier

Du kan indsætte/opdatere flere værdier på én gang. Du skal blot tilføje hvert nøgle/værdi-par adskilt af et komma. Eksempel:

SELECT JSON_SET('{"a":1, "b":2, "c":3}', '$.a', 9, '$.c', 'Bart') SOM 'Resultat';

Resultat:

+---------------------------------------+| Resultat |+--------------------------------------+| {"a":9, "b":2, "c":"Bart"} |+-------------------------------- ----+

Eksempel 5 – Et større JSON-dokument

Her er et eksempel med et (lidt) større JSON-dokument.

SET @data ='{ "Person":{ "Navn":"Homer", "Hobbyer":["Spise", "Sover"] } }';SELECT JSON_SET(@data, '$.Person. Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';

Resultat:

+---------------------------------------------- -------------------+| Resultat |+----------------------------------------------- ------------------+| {"Person":{"Navn":"Bart", "Hobbyer":["Spise", "Fortræd"]}} |+------------------- ------------------------------------------------------+

Se også JSON_INSERT() for at indsætte værdier uden at erstatte eksisterende værdier, og JSON_REPLACE() til kun at erstatte eksisterende værdier.


  1. Postgres - Funktion til at returnere skæringspunktet mellem 2 ARRAY'er?

  2. Sådan får du den aktuelle dato og tid i MySQL

  3. Byg et nyhedsbrevssystem med PHP og MySQL

  4. Caching i PostgreSQL