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

SQLite JSON_SET()

SQLite json_set() Funkce nám umožňuje vložit nebo nahradit hodnotu v dokumentu JSON.

Původní JSON předáme jako první argument při volání funkce, za ním následuje cesta, která určuje, kam se má vložit/nahradit nová hodnota, následovaná hodnotou, která se má vložit/nahradit.

V případě potřeby můžeme také vložit/nahradit více párů klíč/hodnota.

Syntaxe

Funguje to takto:

json_set(json, path1, value1, path2, value2...)

Kde json představuje původní JSON a path1, value1, path2, value2... jsou páry cesta/hodnota, které můžeme použít k vložení nových hodnot do dokumentu JSON (nebo k nahrazení, podle okolností).

Příklad

Zde je základní příklad k demonstraci:

SELECT json_set('{ "a" : 1 }', '$.b', 2);

Výsledek:

{"a":1,"b":2}

Zde jsem vložil nový pár klíč/hodnota ("b":2 ) do dokumentu JSON.

Můžeme vložit více párů klíč/hodnota takto:

SELECT json_set('{ "a" : 1 }', '$.b', 2, '$.c', 3 );

Výsledek:

{"a":1,"b":2,"c":3}

Jednoduše jsem přidal více argumentů klíč/hodnota, když jsem zavolal json_set() .

Nahradit hodnoty

Pokud klíč již existuje, jeho hodnota se nahradí novou hodnotou:

SELECT json_set('{ "a" : 1, "b" : 2 }', '$.b', 3);

Výsledek:

{"a":1,"b":3}

Toto je hlavní rozdíl mezi json_set() a json_insert() . json_insert() funkce nevloží hodnotu, pokud klíč již existuje.

Dalším způsobem, jak nahradit hodnoty, je použít json_replace() .

Vložit objekt

Zde je příklad vložení objektu JSON:

SELECT json_set('{ "a" : 1 }', '$.b', json('{ "c" : 2 }') );

Výsledek:

{"a":1,"b":{"c":2}}

V tomto případě jsem použil json() funkce vrátit můj argument jako řetězec JSON. Když to neudělám, stane se toto:

SELECT json_set('{ "a" : 1 }', '$.b', '{ "c" : 2 }' );

Výsledek:

{"a":1,"b":"{ \"c\" : 2 }"}

Dokument JSON je vložen jako textová hodnota namísto objektu JSON a jeho dvojité uvozovky jsou proto ukončeny zpětnými lomítky.

Pouhé odstranění jednoduchých uvozovek však způsobí chybu:

SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );

Výsledek:

Parse error: unrecognized token: "{"
  SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );
                          error here ---^

Bez jednoduchých uvozovek nebo json() funkce, dostaneme chybu, jakmile narazí na levou složenou závorku.

Dalším způsobem, jak vložit objekt JSON, je použít json_object() místo funkce json() funkce:

SELECT json_set('{ "a" : 1 }', '$.b', json_object('c', 2) );

Výsledek:

{"a":1,"b":{"c":2}}

Vložit pole

Při vkládání polí je to podobné:

SELECT json_set('{ "a" : 1 }', '$.b', json('[ 2, 3, 4 ]'));

Výsledek:

{"a":1,"b":[2,3,4]}

Pokud odstraníme json() funkce, dostaneme toto:

SELECT json_set('{ "a" : 1 }', '$.b', '[ 2, 3, 4 ]');

Výsledek:

{"a":1,"b":"[ 2, 3, 4 ]"}

A pokud odstraníme jednoduché uvozovky, dostaneme chybu:

SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);

Výsledek:

Parse error: no such column:  2, 3, 4 
  SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);
                          error here ---^

Alternativně můžeme použít json_array() funkce namísto json() . Tato funkce vám umožňuje vytvořit pole na základě jeho argumentů:

SELECT json_set('{ "a" : 1 }', '$.b', json_array( 2, 3, 4 ) );

Výsledek:

{"a":1,"b":[2,3,4]}

Přidat hodnoty na konec pole

Můžeme použít json_set() pro připojení hodnot na konec pole.

Chcete-li to provést, použijte index pole [#] :

SELECT json_set('[ 1, 2, 3 ]', '$[#]', 4 );

Výsledek:

[1,2,3,4]

Stejný princip platí pro vnořená pole:

SELECT json_set('[ 1, [ "a", "b" ], 3 ]', '$[1][#]', "c" );

Výsledek:

[1,["a","b","c"],3]

Nahradit prvky pole

Můžeme použít json_set() k nahrazení prvků v poli:

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

Výsledek:

[1,4,3]

Pole jsou založeny na nule, a proto [1] označuje druhou položku pole.

json_replace() funkci lze také použít k nahrazení stávajících prvků. Opět se to liší od json_insert() , který nenahrazuje stávající prvky.

Neplatné cesty

Pokud naše cesta není správně vytvořena, zobrazí se chyba:

SELECT json_set('{ "a" : 1 }', 'b', 2);

Výsledek:

Runtime error: JSON path error near 'b'

V tomto případě jsem zapomněl uvést $. v přední části cesty.

Neplatné dokumenty JSON

Také se zobrazí chyba, že JSON není správně vytvořen:

SELECT json_set('{ "a" : 1', '$.b', 2);

Výsledek:

Runtime error: malformed JSON

Tentokrát nám chyba říká, že náš JSON je chybný.


  1. PostgreSQL 9.3:Dynamická kontingenční tabulka

  2. Porozumění časování operátora prováděcího plánu

  3. Jak mohu použít jeden fond připojení mssql napříč několika trasami ve webové aplikaci Express 4?

  4. Průvodce analýzou dat:Je čas vyniknout pomocí Excelu!