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

SQLite JSON_PATCH()

I SQLite er json_patch() funktionen kan bruges til at tilføje, ændre eller slette elementer i et JSON-objekt.

For at gøre dette kører den RFC-7396 MergePatch-algoritmen for at anvende en given patch mod det givne JSON-input.

Vi sender den originale JSON som det første argument, når vi kalder funktionen, efterfulgt af patchen. Funktionen anvender derefter denne patch mod JSON i det første argument.

Syntaks

Syntaksen ser sådan ud:

json_patch(T,P)

Hvor T repræsenterer den originale JSON og P er lappen. Funktionen anvender patch P mod T .

Indholdet af den medfølgende patch P sammenlignes med det aktuelle indhold af JSON-måldokumentet T . Hvis P indeholder medlemmer, der ikke vises i T , tilføjes disse medlemmer. Hvis T indeholder medlemmet, erstattes værdien.

Nulværdier i P gives særlig betydning for at angive fjernelse af eksisterende værdier i T .

Eksempler

Her er nogle eksempler til demonstration.

Indsæt

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

Resultat:

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

At forsøge at indsætte et nyt medlem med en nulværdi virker ikke:

SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }');

Resultat:

{"name":"Fluffy"}

Null-værdier bruges faktisk til at fjerne medlemmer fra JSON (som vist i et senere eksempel).

Opdater

SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }');

Resultat:

{"name":"Baldy"}

Hvis der er flere nøgle/værdi-par, men vi kun ønsker at opdatere ét, behøver vi kun at angive det ene i vores andet argument:

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

Resultat:

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

Det samme koncept gælder ved opdatering af flere nøgle/værdi-par – vi behøver kun at specificere disse:

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

Resultat:

{"name":"Baldy","type":"Cat","age":11}

Opdater og indsæt

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

Resultat:

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

Slet/fjern

Nulværdier i flettepatchen tildeles en særlig betydning for at angive fjernelse af eksisterende værdier i målet:

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

Resultat:

{"name":"Fluffy"}

Arrays

json_patch() funktion kan ikke tilføje elementer til et array eller ændre individuelle elementer i et array. Den kan kun indsætte, erstatte eller slette hele arrayet som en enkelt enhed.

Så her er et eksempel på at tilføje et element til en matrix:

SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]');

Resultat:

[1,2,3,4]

Jeg var nødt til at erstatte det originale array med et helt nyt. Så teknisk set har jeg faktisk ikke tilføjet noget – jeg erstattede simpelthen hele arrayet med et andet.

Det samme koncept gælder, hvis arrayet er inden for et objekt:

SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }');

Resultat:

{"scores":[1,2,3,4]}

Hvis du har brug for at arbejde med arrays, prøv funktioner såsom json_set() , json_insert() , json_remove() og json_replace() i stedet.

Erstat et objekt med et array

Vi kan erstatte objekter med et array ved blot at levere et array som patch:

SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]');

Resultat:

["Fluffy",10]

Erstat et array med et objekt

Og det fungerer også omvendt:

SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }');

Resultat:

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

  1. Kan en fremmednøgle referere til et ikke-unikt indeks?

  2. Gå til start testdrevet databaseudvikling (TDDD)

  3. Virkningen af ​​at definere VARCHAR2-søjle med større længde

  4. Handlingen er ikke gyldig for tilstanden af ​​transaktionsfejlen og transaktionsomfanget