sql >> Databáze >  >> RDS >> SQLite

SQLite JSON_PATCH()

V SQLite, json_patch() funkci lze použít k přidání, úpravě nebo odstranění prvků objektu JSON.

Za tímto účelem spustí algoritmus RFC-7396 MergePatch, který aplikuje danou opravu na daný vstup JSON.

Původní JSON předáme jako první argument při volání funkce, následovaný patchem. Funkce pak aplikuje tuto opravu na JSON v prvním argumentu.

Syntaxe

Syntaxe vypadá takto:

json_patch(T,P)

Kde T představuje původní JSON a P je náplast. Funkce aplikuje patch P proti T .

Obsah poskytnutého patche P se porovnává s aktuálním obsahem cílového dokumentu JSON T . Pokud P obsahuje členy, které se nevyskytují v T , tito členové jsou přidáni. Pokud T obsahuje člen, hodnota je nahrazena.

Hodnoty Null v P mají zvláštní význam pro označení odstranění existujících hodnot v T .

Příklady

Zde je několik příkladů k demonstraci.

Vložit

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

Výsledek:

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

Pokus o vložení nového člena s hodnotou null nefunguje:

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

Výsledek:

{"name":"Fluffy"}

Hodnoty Null se ve skutečnosti používají k odstranění členů z JSON (jak je vidět v pozdějším příkladu).

Aktualizovat

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

Výsledek:

{"name":"Baldy"}

Pokud existuje více párů klíč/hodnota, ale my chceme aktualizovat pouze jeden, potřebujeme v našem druhém argumentu specifikovat pouze jeden:

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

Výsledek:

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

Stejný koncept platí při aktualizaci více párů klíč/hodnota – potřebujeme pouze specifikovat tyto:

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

Výsledek:

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

Aktualizovat a vložit

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

Výsledek:

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

Smazat/Odebrat

Hodnoty Null v patchi sloučení mají zvláštní význam, který označuje odstranění existujících hodnot v cíli:

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

Výsledek:

{"name":"Fluffy"}

Pole

json_patch() Funkce nemůže připojovat prvky k poli ani upravovat jednotlivé prvky pole. Může pouze vložit, nahradit nebo odstranit celé pole jako jednu jednotku.

Zde je příklad připojení prvku k poli:

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

Výsledek:

[1,2,3,4]

Musel jsem vyměnit původní pole za zcela nové. Technicky jsem tedy ve skutečnosti nic nepřipojil – jednoduše jsem nahradil celé pole jiným.

Stejný koncept platí, pokud je pole v objektu:

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

Výsledek:

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

Pokud potřebujete pracovat s poli, vyzkoušejte funkce jako json_set() , json_insert() , json_remove() a json_replace() místo toho.

Nahradit objekt polem

Objekty můžeme nahradit polem jednoduše tím, že pole dodáme jako záplatu:

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

Výsledek:

["Fluffy",10]

Nahradit pole objektem

A funguje to i obráceně:

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

Výsledek:

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

  1. Jak připojit vzdálenou databázi MySQL v PHP

  2. Propojení nebo import dat ze Salesforce

  3. Jak zobrazit čísla řádků v dotazu PostgreSQL?

  4. PostgreSQL drop omezení s neznámým názvem