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

JSON_INSERT() – Indsæt værdier i et JSON-dokument i MySQL

I MySQL er JSON_INSERT() funktion indsætter en værdi 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.

Syntaks

Syntaksen ser sådan ud:

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

Hvor:

  • json_doc er JSON-dokumentet.
  • path er stien til det element, som den nye værdi skal indsættes for.
  • val er den nye værdi, der vil blive indsat.

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.

Eksempel 1 – Grundlæggende brug

Her er et eksempel til at demonstrere.

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

Resultat:

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

Så det 3. argument indsættes i arrayet ved den angivne sti. I dette tilfælde bruger jeg $.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_INSERT('{"Navn":"Homer", "Køn":"Mand"}', '$.Alder', 39) SOM 'Resultat';

Resultat:

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

Eksempel 2 – Forsøger at overskrive en eksisterende sti

Et sti-værdi-par for en eksisterende sti i dokumentet ignoreres og overskriver ikke den eksisterende dokumentværdi.

Så hvis vi ændrer det forrige eksempel til at indsætte en værdi ved Name (som allerede eksisterer), sker der ingen indsættelse:

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

Resultat:

+--------------------------------------------+| Resultat |+---------------------------------------------+| {"Navn":"Homer", "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_INSERT('[1, 2, 3]', '$[3]', 4) SOM 'Resultat';

Resultat:

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

Men hvis du bruger en sti, der allerede findes i arrayet, forbliver arrayet uændret:

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

Resultat:

+------------+| Resultat |+-----------+| [1, 2, 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_INSERT('{"a":1, "b":2}', '$[2]', 3) SOM 'Resultat';

Resultat:

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

Men igen, hvis du forsøger at indsætte en værdi på en sti, der allerede eksisterer, forbliver JSON-dokumentet uændret:

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

Resultat:

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

Eksempel 4 – 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_INSERT(@data, '$.Person. Hobbyer[2]', "Base Jumping") AS 'Resultat';

Resultat:

+---------------------------------------------- ------------------------------------+| Resultat |+------------------------------------------------------ -----------------------------------+| {"Person":{"Name":"Homer", "Hobbyer":["Spise", "Sover", "Base Jumping"]}} |+-------- -------------------------------------------------- ------------------+

Se også JSON_ARRAY_INSERT() og JSON_ARRAY_APPEND() hvis du har brug for at indsætte eller tilføje data i et JSON-array.


  1. Returner en liste over tidszoner, der understøttes af PostgreSQL

  2. Forbedring af forespørgselshastigheden:simpel SELECT i den store postgres-tabel

  3. Mysql rækkefølge efter specifikke ID-værdier

  4. Bedste måde at implementere et revisionsspor i SQL Server?