sql >> Databasteknik >  >> RDS >> SQLite

SQLite JSON_REMOVE()

Vi kan använda SQLite json_remove() funktion för att ta bort ett eller flera element från ett JSON-objekt eller en array.

Vi skickar den ursprungliga JSON som det första argumentet när vi anropar funktionen, följt av en eller flera sökvägar som anger vilka element som ska tas bort. Med "element" menar jag antingen arrayelement eller objektmedlemmar (nyckel/värdepar).

Syntax

Syntaxen ser ut så här:

json_remove(X,P,...)

Där X representerar den ursprungliga JSON, och P,... representerar sökvägen/erna som ska raderas.

Exempel

Här är ett exempel att visa:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');

Resultat:

{"name":"Fluffy"}

Här angav vi $.age sökväg, och det var det som togs bort från JSON-dokumentet.

Ta bort flera medlemmar

Vi kan ta bort flera medlemmar från ett JSON-objekt genom att ange flera sökvägar, separerade med ett kommatecken:

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }', 
    '$.type',
    '$.age'
);

Resultat:

{"name":"Fluffy"}

Arrayer

Vi kan ta bort arrayelement genom att ange elementets index:

SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');

Resultat:

[0,1,3]

Matriser är nollbaserade, så räkningen börjar från 0 .

Det är dock viktigt att vara uppmärksam på i vilken ordning borttagningarna görs. Borttagningar sker sekventiellt från vänster till höger. Ändringar orsakade av tidigare borttagningar kan påverka sökvägen för efterföljande argument.

Här är ett exempel på hur det kan påverka vårt resultat:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[0]',
    '$[2]'
);

Resultat:

[1,2]

I det här fallet, arrayelementet 0 togs bort först, sedan arrayelementet 2 togs bort från den återstående arrayen. Med andra ord tog den andra banan bort elementet från arrayen efter att den första banan redan hade tagits bort.

Den resulterande arrayen är en som vi kanske inte hade förutsett. Istället för att ta bort elementen 0 och 2 från den ursprungliga arrayen har vi tagit bort elementen 0 och 3 från den ursprungliga arrayen.

Vi kan lösa det här problemet genom att ordna om sökvägarna:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[2]',
    '$[0]'
);

Resultat:

[1,3]

Inga sökvägar

Sökvägsargumenten är faktiskt valfria. Om vi ​​anropar json_remove() utan sökvägsargument returnerar den en minifierad version av indata-JSON (dvs. med överflödigt blanksteg borttaget):

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }'
);

Resultat:

{"name":"Fluffy","type":"Cat","age":10}

Det här är samma resultat som vi skulle få om vi använde json() funktion istället för json_remove() .

Icke-existerande sökväg

Att specificera en sökväg som inte finns i indata-JSON resulterar i att den ursprungliga JSON returneras, oförändrad:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');

Resultat:

{"name":"Fluffy","age":10}

Ogiltiga sökvägar

Vi får ett felmeddelande om vår väg inte är väl utformad:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');

Resultat:

Runtime error: JSON path error near 'age'

I det här fallet glömde jag att inkludera $. längst fram på stigen.

Ogiltiga JSON-dokument

Vi får också ett felmeddelande om att JSON inte är välformaterad:

SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');

Resultat:

Runtime error: malformed JSON

Den här gången berättar felet att vår JSON är felaktig.


  1. Hur man skriver till en CSV-fil med Oracle SQL*Plus

  2. Hur kan jag importera en databas med MySQL från terminal?

  3. Vilket är det mest rekommenderade sättet att lagra tid i PostgreSQL med Java?

  4. Lista alla tabeller i postgresql informationsschema