SQLite json_object()
funkce vrací dobře tvarovaný objekt JSON na základě jeho argumentů.
Funkce přijímá nula nebo více párů argumentů a vrací správně vytvořený objekt JSON založený na těchto argumentech.
Syntaxe
json_object(label1,value1,...)
Kde label1, value2, ...
představuje páry štítek/hodnota.
Příklad
Zde je jednoduchý příklad k demonstraci:
SELECT json_object( "name", "Igor", "age", 35 );
Výsledek:
{"name":"Igor","age":35}
Předávání objektů JSON
Předání argumentu s typem SQL TEXT má za následek řetězec JSON v uvozovkách, přičemž všechny popisky v uvozovkách budou uvozeny:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' );
Výsledek:
{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}
Pokud nechceme, aby se to stalo, můžeme použít json()
funkci poskytnout hodnotu jako platný dokument JSON:
SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') );
Výsledek:
{"user":{"name":"igor","age":35}}
Dalším způsobem, jak to udělat, je použít ->
SQLite operátor:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' );
Výsledek:
{"user":{"name":"igor","age":35}}
Případně můžeme použít jiný json_object()
funkce:
SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) );
Výsledek:
{"user":{"name":"Igor","age":35}}
Zde je to s některými dalšími hodnotami:
SELECT json_object(
"a", 1,
"user", json_object( "name", "Igor", "age", 35 ),
"b", 2
);
Výsledek:
{"a":1,"user":{"name":"Igor","age":35},"b":2}
Předávání polí JSON
Při předávání polí JSON je to podobné:
SELECT json_object( "scores", '[ 9, 4, 7 ]' );
Výsledek:
{"scores":"[ 9, 4, 7 ]"}
V tomto případě je hodnotou řetězec, který připomíná pole.
Abychom vrátili skutečné pole JSON, můžeme předat náš argument do json()
funkce:
SELECT json_object( "scores", json('[ 9, 4, 7 ]') );
Výsledek:
{"scores":[9,4,7]}
Můžeme také použít ->
operátor:
SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' );
Výsledek:
{"scores":[9,4,7]}
Případně můžeme předat hodnoty do json_array()
funkce:
SELECT json_object( "scores", json_array( 9, 4, 7 ) );
Výsledek:
{"scores":[9,4,7]}
Zde je to s některými dalšími páry název/hodnota:
SELECT json_object(
"name", "Bruno",
"scores", json_array( 9, 4, 7 ),
"age", 25
);
Výsledek:
{"name":"Bruno","scores":[9,4,7],"age":25}
Vytvořte prázdný objekt
Volání json_object()
bez předání jakýchkoli argumentů bude výsledkem prázdný objekt:
SELECT json_object();
Výsledek:
{}
Duplicitní štítky
V době psaní json_object()
přijímá duplicitní štítky bez problémů. Proto můžeme dělat věci jako toto:
SELECT json_object( "b", 1, "b", 2 );
Výsledek:
{"b":1,"b":2}
Dokumentace SQLite však radí, že tomu tak nemusí být vždy – budoucí verze SQLite nemusí takové scénáře podporovat.
Příklad databáze
Můžeme použít json_object()
při získávání dat z databáze.
Předpokládejme, že spustíme následující dotaz:
SELECT * FROM Pets;
Výsledek:
+-------+---------+--------+ | PetId | PetName | TypeId | +-------+---------+--------+ | 1 | Homer | 3 | | 2 | Yelp | 1 | | 3 | Fluff | 2 | | 4 | Brush | 4 | +-------+---------+--------+
Vidíme, že existují tři sloupce a vidíme jejich názvy.
Můžeme použít json_object()
fungovat na tomto stole takto:
SELECT json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
FROM Pets;
Výsledek:
{"PetId":1,"PetName":"Homer","TypeId":3} {"PetId":2,"PetName":"Yelp","TypeId":1} {"PetId":3,"PetName":"Fluff","TypeId":2} {"PetId":4,"PetName":"Brush","TypeId":4}
Zde jsem výslovně uvedl názvy štítků a pro hodnoty jsem pak použil skutečné sloupce z databáze. Každý řádek se stane dokumentem JSON a každý sloupec se v tomto dokumentu JSON stane párem klíč/hodnota.
Můžeme také použít json_group_array()
funkce pro uzavření dokumentů do pole:
SELECT json_group_array(
json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
)
FROM Pets;
Výsledek:
[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]