sql >> データベース >  >> RDS >> SQLite

SQLite JSON_OBJECT()

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

    1. MySQLのSUBDATE()とDATE_SUB():違いは何ですか?

    2. インデックスを取得して先頭の%ワイルドカードを探す1つの方法

    3. PostgreSQLCASE...複数の条件で終了

    4. PostgreSQLの日付から月を引く