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

JSON_REPLACE() – Erstat værdier i et JSON-dokument i MySQL

I MySQL er JSON_REPLACE() funktion erstatter værdier i et JSON-dokument og returnerer resultatet.

Du angiver JSON-dokumentet som det første argument, efterfulgt af stien til at erstatte data på, efterfulgt af værdien, der skal erstatte den eksisterende værdi med.

Du kan erstatte data flere steder i dokumentet, hvis det kræves. For at gøre dette skal du blot angive flere sti/værdi-par efter behov.

Syntaks

Syntaksen ser sådan ud:

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

Hvor json_doc er JSON-dokumentet, path er stien til at erstatte dataene ved og val er den nye værdi, der erstatter den eksisterende værdi.

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

Hvis stien/værdiparret ikke findes i JSON-dokumentet, ignoreres det og har ingen effekt.

Det første argument skal være et gyldigt JSON-dokument, ellers opstår der en fejl.

Også path argumentet skal være et gyldigt stiudtryk, og det må ikke indeholde en * eller ** jokertegn, ellers vil der opstå en fejl.

Eksempel 1 – Grundlæggende brug

Her er et eksempel til at demonstrere.

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

Resultat:

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

I dette tilfælde erstattede vi b 's værdi med 9 . Dette skyldes, at vi har angivet $.b som det andet argument, og 9 som den tredje.

Her er et andet eksempel:

SELECT JSON_REPLACE('{"Navn":"Bart", "Alder":10}', '$.Name', 'Nelson - Ha Ha!') SOM 'Resultat';

Resultat:

+----------------------------------------+| Resultat |+----------------------------------------+| {"Alder":10, "Navn":"Nelson - Ha Ha!"} |+----------------------------------- -----------+

Eksempel 2 – Ikke-eksisterende sti

Hvis du angiver en sti, der ikke eksisterer, fjernes intet. Det originale JSON-dokument returneres uden ændringer.

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

Resultat:

+--------------------------------------+| Resultat |+-------------------------------------+| {"Alder":39, "Navn":"Homer"} |+------------------------------------+ 

Eksempel 3 – Arrays

Her er et eksempel, hvor du bruger et array.

SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) SOM 'Resultat';

Resultat:

+------------+| Resultat |+-----------+| [9, 2, 3] |+------------+

Arrays bruger nul-baseret nummerering, så i dette tilfælde erstattes det første element.

Her er et andet array-eksempel. Denne gang erstatter vi en værdi i et indlejret array.

SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) SOM 'Resultat';

Resultat:

+------------------------+| Resultat |+--------------------+| [1, 2, [3, 9, 5]] |+--------------------+

Eksempel 4 – Flere stier

Du kan angive mere end én sti for at erstatte data flere steder i JSON-dokumentet.

Grundlæggende eksempel:

SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) SOM 'Resultat';

Resultat:

+------------------------+| Resultat |+------------------------+| [1, 9, 3, 22, 5] |+------------------------+

Eksempel 5 – Et større JSON-dokument

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

SET @data ='{ "Person":{ "Navn":"Homer", "Alder":39, "Hobbyer":["Spise", "Sover"] } }';SELECT JSON_REPLACE(@data , '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') SOM 'Resultat';

Resultat:

+---------------------------------------------- ----------------------------------+| Resultat |+------------------------------------------------------ ----------------------------------+| {"Person":{"Alder":10, "Navn":"Bart", "Hobbyer":["Spise", "Base Jumping"]}} |+------- -------------------------------------------------- ------------------+

  1. er det muligt at vælge EXISTS direkte som en smule?

  2. SQL Server-fejl 110:Der er færre kolonner i INSERT-sætningen end værdier angivet i VALUES-udtrykket.

  3. Oracle Date TO_CHAR('Month DD, YYYY') har ekstra mellemrum i sig

  4. Installation af RAC til en database med datafiler