sql >> Database teknologi >  >> RDS >> SQLite

SQLite JSON_REMOVE()

Vi kan bruge SQLite json_remove() funktion til at fjerne et eller flere elementer fra et JSON-objekt eller et array.

Vi sender den originale JSON som det første argument, når vi kalder funktionen, efterfulgt af en eller flere stier, der specificerer, hvilke elementer der skal fjernes. Med "elementer" mener jeg enten matrixelementer eller objektmedlemmer (nøgle/værdi-par).

Syntaks

Syntaksen ser sådan ud:

json_remove(X,P,...)

Hvor X repræsenterer den originale JSON og P,... repræsenterer stien/stierne, der skal slettes.

Eksempel

Her er et eksempel til demonstration:

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

Resultat:

{"name":"Fluffy"}

Her specificerede vi $.age sti, og det er det, der blev fjernet fra JSON-dokumentet.

Fjern flere medlemmer

Vi kan fjerne flere medlemmer fra et JSON-objekt ved at angive flere stier, adskilt af et komma:

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

Resultat:

{"name":"Fluffy"}

Arrays

Vi kan fjerne array-elementer ved at angive elementets indeks:

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

Resultat:

[0,1,3]

Arrays er nul-baserede, og derfor starter optællingen fra 0 .

Det er dog vigtigt at være opmærksom på den rækkefølge, som fjernelserne foretages i. Fjernelser sker sekventielt fra venstre mod højre. Ændringer forårsaget af tidligere fjernelser kan påvirke stisøgningen efter efterfølgende argumenter.

Her er et eksempel på, hvordan det kan påvirke vores resultat:

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

Resultat:

[1,2]

I dette tilfælde array-elementet 0 blev slettet først, derefter array-elementet 2 blev slettet fra det resterende array. Med andre ord fjernede den anden sti elementet fra arrayet, efter at den første sti allerede var blevet fjernet.

Den resulterende matrix er en, som vi måske ikke havde forventet. I stedet for at fjerne elementerne 0 og 2 fra det originale array har vi fjernet elementerne 0 og 3 fra det originale array.

Vi kan løse dette problem ved at omarrangere stierne:

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

Resultat:

[1,3]

Ingen stier

Stiargumenterne er faktisk valgfrie. Hvis vi kalder json_remove() uden sti-argumenter returnerer den en minificeret version af input-JSON (dvs. med overskydende mellemrum fjernet):

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

Resultat:

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

Dette er det samme resultat, som vi ville få, hvis vi brugte json() funktion i stedet for json_remove() .

Ikke-eksisterende sti

Angivelse af en sti, der ikke findes i input-JSON, resulterer i, at den originale JSON returneres uændret:

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

Resultat:

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

Ugyldige stier

Vi får en fejl, hvis vores vej ikke er veludformet:

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

Resultat:

Runtime error: JSON path error near 'age'

I dette tilfælde glemte jeg at inkludere $. forrest på stien.

Ugyldige JSON-dokumenter

Vi får også en fejl, JSON er ikke veludformet:

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

Resultat:

Runtime error: malformed JSON

Denne gang fortæller fejlen os, at vores JSON er forkert udformet.


  1. FLOOR() Funktion i Oracle

  2. Bevar tidszone i PostgreSQL timestamptz type

  3. Hvordan kan jeg gøre noget som:BRUG @databaseName

  4. Udførelsesplanens indvirkning på ASYNC_NETWORK_IO Venter – Del 1