sql >> Databasteknik >  >> RDS >> Mysql

JSON_REMOVE() – Ta bort data från ett JSON-dokument i MySQL

I MySQL, JSON_REMOVE() funktionen tar bort data från ett JSON-dokument och returnerar resultatet.

Du tillhandahåller JSON-dokumentet som det första argumentet, följt av sökvägen att ta bort data från. Du kan tillhandahålla flera sökvägar om det behövs.

Syntax

Syntaxen ser ut så här:

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

Där json_doc är JSON-dokumentet och path är sökvägen att ta bort data från.

path argument utvärderas från vänster till höger. Dokumentet som skapas genom att utvärdera en sökväg blir det nya värdet mot vilket nästa sökväg utvärderas.

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

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

Exempel 1 – Grundläggande användning

Här är ett exempel att visa.

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

Resultat:

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

I det här fallet tog vi bort nyckel/värdeparet med nyckeln b . Detta beror på att vi angav $.b som det andra argumentet.

Här är ett annat exempel:

SELECT JSON_REMOVE('{"Namn":"Homer", "Kön":"Man", "Ålder":39}', '$.Age') SOM 'Resultat';

Resultat:

+---------------------------------------------+| Resultat |+---------------------------------------------+| {"Name":"Homer", "Gender":"Mane"} |+-------------------------------------- ------+

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_REMOVE('{"Namn":"Homer", "Age":39}', '$.Gender') SOM 'Resultat';

Resultat:

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

Exempel 3 – Arrayer

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

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

Resultat:

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

Matriser använder nollbaserad numrering, så i det här fallet tas det första elementet bort från matrisen.

Här är ett annat exempel på array. Den här gången tar vi bort ett värde från en kapslad array.

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

Resultat:

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

Exempel 4 – Flera sökvägar

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

Grundläggande exempel:

VÄLJ JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') SOM 'Resultat';

Resultat:

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

Som nämnts, path argument utvärderas från vänster till höger och dokumentet som skapas genom att utvärdera en sökväg blir det nya värdet mot vilket nästa sökväg utvärderas.

Därför, i det här exemplet, tar det andra sökvägsargumentet bort ett annat värde än vad det skulle ha tagit bort om det varit det enda sökvägsargumentet. Om det hade varit det enda sökvägsargumentet skulle det ha tagit bort 4 .

Så här menar jag:

SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') SOM 'One Path', JSON_REMOVE('[1, 2, 3, 4, 5]', ' $[1]', '$[3]') SOM 'Två vägar';

Resultat:

+--------------+-----------+| En väg | Två vägar |+--------------+-----------+| [1, 2, 3, 5] | [1, 3, 4] |+--------------+------------+

Så du kan se det när vi använder $[3] som den enda sökvägen tar den bort 4 från arrayen. Men när vi använder den som den andra sökvägen tar den bort 5 (och 4 lämnas orörd).

Ett annat exempel, den här gången tar du bort värden från en array och en kapslad array:

VÄLJ JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') SOM 'Resultat';

Resultat:

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

Så igen, även om arrayen är i position 2 i originaldokumentet, det första sökvägsvärdet ($[0] ) skär ner den yttre arrayen och den inre arrayen ändras till position 1 .

Om detta får ditt huvud att snurra kan du alltid byta vägargumenten, så att värdena längst till höger tas bort först. På så sätt kommer det inte att påverka placeringen av värdena längst till vänster, och därför kan du ange sökvägarna baserat på det ursprungliga JSON-dokumentet.

Så vi kan ändra föregående kod till följande och få samma resultat:

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

Resultat:

+-------------+| Resultat |+-------------+| [2, [3, 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, "Hobbies":["Äta", "Sova", "Base Jumping"] } }'; SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') SOM 'Resultat';

Resultat:

+------------------------------------------------------ --------------------+| Resultat |+------------------------------------------------------- ------------------+| {"Person":{"Name":"Homer", "Hobbys":["Äta", "Sova"]}} |+------------------- ------------------------------------------------------------+ 
  1. Mysql-händelsefel med php

  2. Hur gör man dejtmatematik som ignorerar årtalet?

  3. MIN() Funktion i PostgreSQL

  4. Hur man pivoterar dynamiskt med datum som kolumn