sql >> Database >  >> RDS >> SQLite

SQLite JSON_REMOVE()

We kunnen de SQLite json_remove() . gebruiken functie om een ​​of meer elementen uit een JSON-object of array te verwijderen.

We geven de originele JSON door als het eerste argument wanneer we de functie aanroepen, gevolgd door een of meer paden die aangeven welke elementen moeten worden verwijderd. Met "elementen" bedoel ik ofwel array-elementen of objectleden (sleutel/waarde-paren).

Syntaxis

De syntaxis gaat als volgt:

json_remove(X,P,...)

Waar X staat voor de originele JSON, en P,... staat voor het pad/de paden die moeten worden verwijderd.

Voorbeeld

Hier is een voorbeeld om te demonstreren:

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

Resultaat:

{"name":"Fluffy"}

Hier hebben we de $.age . gespecificeerd pad, en dat is wat uit het JSON-document is verwijderd.

Meerdere leden verwijderen

We kunnen meerdere leden van een JSON-object verwijderen door meerdere paden op te geven, gescheiden door een komma:

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

Resultaat:

{"name":"Fluffy"}

Arrays

We kunnen array-elementen verwijderen door de index van het element op te geven:

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

Resultaat:

[0,1,3]

Arrays zijn gebaseerd op nul, dus het tellen begint vanaf 0 .

Het is echter belangrijk om rekening te houden met de volgorde waarin de verhuizingen plaatsvinden. Verwijderingen gebeuren opeenvolgend van links naar rechts. Wijzigingen veroorzaakt door eerdere verwijderingen kunnen van invloed zijn op het zoeken naar paden voor volgende argumenten.

Hier is een voorbeeld van hoe dat ons resultaat kan beïnvloeden:

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

Resultaat:

[1,2]

In dit geval, matrixelement 0 werd eerst verwijderd, daarna arrayelement 2 is verwijderd uit de resterende array. Met andere woorden, het tweede pad verwijderde het element uit de array nadat het eerste pad al was verwijderd.

De resulterende array is er een die we misschien niet hadden verwacht. In plaats van elementen 0 te verwijderen en 2 uit de originele array hebben we elementen 0 verwijderd en 3 van de originele array.

We kunnen dit probleem oplossen door de paden opnieuw te ordenen:

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

Resultaat:

[1,3]

Geen paden

De padargumenten zijn eigenlijk optioneel. Als we json_remove() . aanroepen zonder padargumenten, retourneert het een verkleinde versie van de invoer-JSON (d.w.z. met overtollige witruimte verwijderd):

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

Resultaat:

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

Dit is hetzelfde resultaat dat we zouden krijgen als we de json() . zouden gebruiken functie in plaats van json_remove() .

Niet-bestaand pad

Als u een pad opgeeft dat niet bestaat in de invoer-JSON, wordt de oorspronkelijke JSON ongewijzigd geretourneerd:

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

Resultaat:

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

Ongeldige paden

We krijgen een foutmelding als ons pad niet goed is gevormd:

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

Resultaat:

Runtime error: JSON path error near 'age'

In dit geval ben ik vergeten $. aan de voorkant van het pad.

Ongeldige JSON-documenten

We krijgen ook een foutmelding dat de JSON niet goed is gevormd:

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

Resultaat:

Runtime error: malformed JSON

Deze keer vertelt de fout ons dat onze JSON een verkeerde indeling heeft.


  1. Resultaten van twee query's combineren in een enkele dataset

  2. Loop op tabellen met PL/pgSQL in Postgres 9.0+

  3. Hoe kan ik een kolom vullen met willekeurige getallen in SQL? Ik krijg dezelfde waarde in elke rij

  4. Verwijder alle spaties uit een string in SQL Server