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

SQLite JSON_ARRAY_LENGTH()

    SQLiteでは、json_array_length() 関数は、指定されたJSON配列の要素数を返します。

    配列は引数として提供されます。配列がより大きなJSONドキュメント内に埋め込まれている場合は、オプションの2番目の引数を使用して配列へのパスを指定できます。

    値が配列でない場合、関数は0を返します 。

    構文

    この関数は、次の2つの方法で使用できます。

    json_array_length(X)
    json_array_length(X,P)

    ここでX 配列とPを表します は、より大きなドキュメント内の配列へのパスを指定するために使用できるオプションのパスです。

    実例となる基本的な例は次のとおりです。

    SELECT json_array_length('[ 7, 12, 10 ]');

    結果:

    3

    配列には3つの要素が含まれているため、3 返されます。

    パスを指定

    配列へのパスを指定するために、2番目の引数を使用することもできます。

    SELECT json_array_length('[ 7, 12, 10 ]', '$');

    結果:

    3

    この場合、配列は最上位にあるため、$を渡します。 パスとして。

    次の例では、より大きなドキュメントに埋め込まれた配列を使用しています。

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

    結果:

    3

    この場合、dogsの配列 3つの要素が含まれています。

    次のレベルに移動して、他の配列の1つにある要素の数を見つけることができます。

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

    結果:

    4

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

    非配列の選択

    パスがJSON配列以外の値を指している場合、0 返されます:

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

    結果:

    0

    存在しないパスの選択

    2番目の引数が存在しないパスを指している場合、null 返されます。

    まず、.nullvalueを設定しましょう NULLへ :

    .nullvalue NULL

    .nullvalue dotコマンドを使用すると、null値を置き換えるために使用される文字列を提供できます。これは、SQLiteでnull値を文字列に置き換えることができるいくつかの方法の1つです。この場合、NULLに設定しました 。これで、null値はNULLを返します。 空白の結果の代わりに。

    それでは、json_array_length()を呼び出しましょう。 、ただし、存在しないパスを指す2番目の引数を使用します:

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

    結果:

    NULL

    無効なパス

    パスが整形式でない場合はエラーが発生します:

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

    結果:

    Runtime error: JSON path error near 'dogs'

    この場合、$. パスの前にあります。

    無効なJSONドキュメント

    また、JSONの形式が正しくないというエラーも表示されます:

    SELECT json_array_length('{ "Dogs" : }', 
    '$'
    );

    結果:

    Runtime error: malformed JSON

    今回のエラーは、JSONの形式が正しくないことを示しています。


    1. Hibernateを使用してOracleでLARGEBLOB(> 100MB)を永続化する方法

    2. 島のT-SQLチャレンジ

    3. ApacheSparkODBCドライバー

    4. ScaleGridがシドニーAWSリージョンで利用可能になりました