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}]