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

SQLiteでJSONドキュメントから値を抽出する3つの方法

    SQLiteを使用する場合、次の方法を使用してJSONドキュメントからデータを抽出できます。

    json_extract() 機能

    その名前が示すように、 json_extract() 関数は、整形式のJSONから1つ以上の値を抽出して返します。

    例:

    SELECT json_extract('{
        "dogs" : [
                { "name" : "Wag", "scores" : [ 7, 9 ] },
                { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
                { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
        ]
    }', 
    '$.dogs[1]'
    );

    結果:

    {"name":"Bark","scores":[3,4,8,7]}

    配列はゼロベースであるため、カウントは 0から始まります。 。したがって、 [1]を指定しました dogs内の2番目の要素を取得します 配列。これはたまたまJSONオブジェクトです。

    パスに追加することで、配列内のその位置にある犬の名前だけを返すことができます:

    SELECT json_extract('{
        "dogs" : [
                { "name" : "Wag", "scores" : [ 7, 9 ] },
                { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
                { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
        ]
    }', 
    '$.dogs[1].name'
    );

    結果:

    Bark

    json_extract()を使用できます 複数のパスを返すには:

    SELECT json_extract('{
        "dogs" : [
                { "name" : "Wag", "scores" : [ 7, 9 ] },
                { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
                { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
        ]
    }', 
    '$.dogs[0].name',
    '$.dogs[1].name',
    '$.dogs[2].name'
    );

    結果:

    ["Wag","Bark","Woof"]

    複数のパスから値を抽出すると、値は配列で返されます。

    -> オペレーター

    -> オペレーターはJSONドキュメントからサブコンポーネントを抽出し、そのサブコンポーネントのJSON表現を返します。

    したがって、最初の例を次のように変更できます。

    SELECT '{
        "dogs" : [
                { "name" : "Wag", "scores" : [ 7, 9 ] },
                { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
                { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
        ]
    }' -> '$.dogs[1]';

    結果:

    {"name":"Bark","scores":[3,4,8,7]}

    -> 演算子はjson_extract()とは微妙に異なります 機能:

    • -> 演算子は常にサブコンポーネントのJSON表現を返します。
    • json_extract() 関数は、2つ以上のパス引数がある場合(結果がJSON配列であるため)、または単一のパス引数が配列またはオブジェクトを参照する場合にのみJSONを返します。
    • パス引数が1つだけで、そのパスがJSON null、文字列、または数値を参照している場合は、 json_extract() 対応するSQLNULL、TEXT、INTEGER、またはREAL値を返します。

    したがって、JSONから犬の名前を抽出すると次のようになります。

    SELECT '{
        "dogs" : [
                { "name" : "Wag", "scores" : [ 7, 9 ] },
                { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
                { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
        ]
    }' -> '$.dogs[1].name';

    結果:

    "Bark"

    今回は引用符で囲まれています。これは、値のJSON表現が返されたためです。 json_extract()で同じ値を抽出したとき 以前は、値のSQL表現を取得しました。

    ただし、->>を使用することもできます SQL表現を返す演算子。

    ->> オペレーター

    ->> 演算子は->と同じように機能します ->>を除く演算子 指定されたサブコンポーネントのSQL表現を返します。具体的には、 SQL TEXTを返します。 、 INTEGER REAL 、または NULL 選択したサブコンポーネントを表す値、または NULL サブコンポーネントが存在しない場合。

    したがって、->>を使用すると次のようになります。 犬の名前を抽出する演算子:

    SELECT '{
        "dogs" : [
                { "name" : "Wag", "scores" : [ 7, 9 ] },
                { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
                { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
        ]
    }' ->> '$.dogs[1].name';

    結果:

    Bark

    引用符で囲まれなくなりました。


    1. PostgreSQLのデフォルト値としてUTCの現在時刻を使用

    2. SelectステートメントでSum、Avg、Countを使用する方法-SQL Server/TSQLチュートリアルパート128

    3. PHPで2回の時間差を取得する

    4. 主キーを整数からシリアルに変換する方法は?