SQLite json_object() 関数は、引数に基づいて整形式のJSONオブジェクトを返します。
この関数は、0個以上の引数のペアを受け入れ、それらの引数に基づいて整形式のJSONオブジェクトを返します。
構文
json_object(label1,value1,...)
ここで、label1, value2, ... ラベルと値のペアを表します。
例
簡単な例を次に示します。
SELECT json_object( "name", "Igor", "age", 35 ); 結果:
{"name":"Igor","age":35} JSONオブジェクトの受け渡し
SQL型TEXTで引数を渡すと、引用符で囲まれたJSON文字列が生成され、引用符で囲まれたラベルはエスケープされます:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' ); 結果:
{"user":"{ \"name\" : \"igor\", \"age\" : 35 }"}
これを望まない場合は、json()を使用できます 値を有効なJSONドキュメントとして提供する関数:
SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') ); 結果:
{"user":{"name":"igor","age":35}}
これを行う別の方法は、SQLiteの->を使用することです。 演算子:
SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' ); 結果:
{"user":{"name":"igor","age":35}}
または、別のjson_object()を使用することもできます 機能:
SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) ); 結果:
{"user":{"name":"Igor","age":35}} ここに他のいくつかの値があります:
SELECT json_object(
"a", 1,
"user", json_object( "name", "Igor", "age", 35 ),
"b", 2
); 結果:
{"a":1,"user":{"name":"Igor","age":35},"b":2} JSON配列の受け渡し
JSON配列を渡す場合も同様です:
SELECT json_object( "scores", '[ 9, 4, 7 ]' ); 結果:
{"scores":"[ 9, 4, 7 ]"} この場合、値は配列に似た文字列です。
実際のJSON配列を返すには、引数をjson()に渡すことができます。 機能:
SELECT json_object( "scores", json('[ 9, 4, 7 ]') ); 結果:
{"scores":[9,4,7]}
->も使用できます 演算子:
SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' ); 結果:
{"scores":[9,4,7]}
または、値をjson_array()に渡すこともできます 機能:
SELECT json_object( "scores", json_array( 9, 4, 7 ) ); 結果:
{"scores":[9,4,7]} これは他の名前/値ペアです:
SELECT json_object(
"name", "Bruno",
"scores", json_array( 9, 4, 7 ),
"age", 25
); 結果:
{"name":"Bruno","scores":[9,4,7],"age":25} 空のオブジェクトを作成する
json_object()を呼び出す 引数を渡さないと、オブジェクトは空になります:
SELECT json_object(); 結果:
{} 重複ラベル
執筆時点では、json_object() 問題なく重複ラベルを受け入れます。したがって、次のようなことができます:
SELECT json_object( "b", 1, "b", 2 ); 結果:
{"b":1,"b":2} ただし、SQLiteのドキュメントでは、これが常に当てはまるとは限らないことが示されています。SQLiteの将来のバージョンでは、このようなシナリオがサポートされない可能性があります。
データベースの例
json_object()を使用できます データベースからデータを取得するとき。
次のクエリを実行するとします。
SELECT * FROM Pets; 結果:
+-------+---------+--------+ | PetId | PetName | TypeId | +-------+---------+--------+ | 1 | Homer | 3 | | 2 | Yelp | 1 | | 3 | Fluff | 2 | | 4 | Brush | 4 | +-------+---------+--------+
3つの列があり、それらの名前を確認できます。
json_object()を使用できます そのテーブルで次のように機能します:
SELECT json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
FROM Pets; 結果:
{"PetId":1,"PetName":"Homer","TypeId":3}
{"PetId":2,"PetName":"Yelp","TypeId":1}
{"PetId":3,"PetName":"Fluff","TypeId":2}
{"PetId":4,"PetName":"Brush","TypeId":4} ここでは、ラベル名を明示的に指定してから、データベースの実際の列を値に使用しました。各行はJSONドキュメントになり、各列はそのJSONドキュメントのキーと値のペアになります。
json_group_array()を使用することもできます ドキュメントを配列に収める関数:
SELECT json_group_array(
json_object(
'PetId', PetId,
'PetName', PetName,
'TypeId', TypeId
)
)
FROM Pets; 結果:
[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{"PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]