sql >> Databasteknik >  >> RDS >> Mysql

JSON_REPLACE() – Ersätt värden i ett JSON-dokument i MySQL

I MySQL, JSON_REPLACE() funktion ersätter värden i ett JSON-dokument och returnerar resultatet.

Du anger JSON-dokumentet som det första argumentet, följt av sökvägen för att ersätta data vid, följt av värdet att ersätta det befintliga värdet med.

Du kan ersätta data på flera ställen i dokumentet om det behövs. För att göra detta, ange bara flera sökväg/värdepar efter behov.

Syntax

Syntaxen ser ut så här:

JSON_REPLACE(json_doc, sökväg, val[, sökväg, val] ...)

Där json_doc är JSON-dokumentet, path är sökvägen för att ersätta data vid och val är det nya värdet för att ersätta det befintliga 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.

Om sökvägen/värdeparet inte finns i JSON-dokumentet ignoreras det och har ingen effekt.

Det första argumentet måste vara ett giltigt JSON-dokument, annars uppstår ett fel.

Även path argumentet måste vara ett giltigt sökvägsuttryck och det får inte innehålla en * eller ** jokertecken, annars uppstår ett fel.

Exempel 1 – Grundläggande användning

Här är ett exempel att visa.

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

Resultat:

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

I det här fallet ersatte vi b s värde med 9 . Detta beror på att vi angav $.b som det andra argumentet och 9 som den tredje.

Här är ett annat exempel:

SELECT JSON_REPLACE('{"Name":"Bart", "Age":10}', '$.Name', 'Nelson - Ha Ha!') AS 'Result';

Resultat:

+----------------------------------------+| Resultat |+----------------------------------------+| {"Ålder":10, "Namn":"Nelson - Ha Ha!"} |+----------------------------------- -----------+

Exempel 2 – Icke-existerande sökväg

Om du anger en sökväg som inte finns tas ingenting bort. Det ursprungliga JSON-dokumentet returneras utan ändringar.

SELECT JSON_REPLACE('{"Name":"Homer", "Age":39}', '$.Gender', 'Mane') AS 'Result';

Resultat:

+-------------------------------------+| Resultat |+-------------------------------------+| {"Ålder":39, "Namn":"Homer"} |+-------------------------------------+ 

Exempel 3 – Arrayer

Här är ett exempel som använder en array.

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

Resultat:

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

Matriser använder nollbaserad numrering, så i det här fallet ersätts det första elementet.

Här är ett annat exempel på array. Den här gången ersätter vi ett värde i en kapslad array.

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

Resultat:

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

Exempel 4 – Flera sökvägar

Du kan ange mer än en sökväg för att ersätta data på flera ställen i JSON-dokumentet.

Grundläggande exempel:

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

Resultat:

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

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", "Age":39, "Hobbys":["Äta", "Sova"] } }';SELECT JSON_REPLACE(@data , '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') SOM 'Resultat';

Resultat:

+------------------------------------------------------ ----------------------------------+| Resultat |+------------------------------------------------------- ----------------------------------+| {"Person":{"Age":10, "Name":"Bart", "Hobbies":["Äta", "Base Jumping"]}} |+------- -------------------------------------------------- ------------------+

  1. Hur man går med i flera kolumner

  2. Hur redigerar jag en tabell för att aktivera CASCADE DELETE?

  3. Azure SQL Database Administration Tips and Hints Exam (DP-300)

  4. Formatera SQL-tabelldata som texttabell