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

SQLite JSON_INSERT()

    SQLite json_insert() 関数を使用すると、JSONドキュメントに新しい値を挿入できます。

    関数を呼び出すときに最初の引数として元のJSONを渡し、その後に新しい値を挿入する場所を指定するパスが続き、その後に挿入する値が続きます。

    必要に応じて、複数のキーと値のペアを挿入することもできます。

    構文

    この関数は次のように呼び出されます:

    json_extract(json, path1, value1, path2, value2...)

    json 元のJSONを表し、path1, value1, path2, value2... は、JSONドキュメントに新しい値を挿入するために使用できるパスと値のペアです。

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

    SELECT json_insert('{ "a" : 1 }', '$.b', 2);

    結果:

    {"a":1,"b":2}

    ここでは、新しいキーと値のペア("b":2)を挿入しました )JSONドキュメントに。

    次のように、複数のキーと値のペアを挿入できます。

    SELECT json_insert('{ "a" : 1 }', '$.b', 2, '$.c', 3 );

    結果:

    {"a":1,"b":2,"c":3}

    json_insert()を呼び出したときに、キー/値の引数を追加しただけです。 。

    キー/値はすでに存在しますか?

    json_insert() キーがすでに存在する場合、関数は値を挿入しません:

    SELECT json_insert('{ "a" : 1 }', '$.a', 2);

    結果:

    {"a":1}

    この場合、キーa はJSONにすでに存在するため、そのキーに新しい値を挿入しようとしても機能しません。

    値を置き換えるには、json_replace()のいずれかを使用します またはjson_set()

    オブジェクトを挿入

    別のJSONドキュメントを挿入する例を次に示します。

    SELECT json_insert('{ "a" : 1 }', '$.b', json('{ "c" : 2 }') );

    結果:

    {"a":1,"b":{"c":2}}

    この場合、json()を使用しました 引数をJSON文字列として返す関数。そうしないとどうなりますか:

    SELECT json_insert('{ "a" : 1 }', '$.b', '{ "c" : 2 }' );

    結果:

    {"a":1,"b":"{ \"c\" : 2 }"}

    JSONドキュメントはJSONオブジェクトではなくテキスト値として挿入されるため、二重引用符は円記号でエスケープされます。

    しかし、これは十分に公平です。結局のところ、新しい値を一重引用符で囲みました。 SQLiteは、文字列とJSONオブジェクトのどちらを挿入するかをどのようにして知りましたか?

    そして、それらの一重引用符を単純に削除できるわけではありません:

    SELECT json_insert('{ "a" : 1 }', '$.b', { "c" : 2 } );

    結果:

    Parse error: unrecognized token: "{"
      SELECT json_insert('{ "a" : 1 }', '$.b', { "c" : 2 } );
                                 error here ---^

    一重引用符またはjson()なし 関数の場合、左中括弧に遭遇するとすぐにエラーが発生します。

    JSONオブジェクトを挿入する別の方法は、json_object()を使用することです。 json()の代わりに関数 機能:

    SELECT json_insert('{ "a" : 1 }', '$.b', json_object('c', 2) );

    結果:

    {"a":1,"b":{"c":2}}

    配列を挿入

    配列を挿入する場合も同様です:

    SELECT json_insert('{ "a" : 1 }', '$.b', json('[ 2, 3, 4 ]'));

    結果:

    {"a":1,"b":[2,3,4]}

    json()を削除すると 関数、これを取得します:

    SELECT json_insert('{ "a" : 1 }', '$.b', '[ 2, 3, 4 ]');

    結果:

    {"a":1,"b":"[ 2, 3, 4 ]"}

    また、一重引用符を削除すると、エラーが発生します:

    SELECT json_insert('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);

    結果:

    Parse error: no such column:  2, 3, 4 
      SELECT json_insert('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);
                                 error here ---^

    または、json_array()を使用することもできます json()の代わりに関数 。この関数を使用すると、引数に基づいて配列を作成できます。

    SELECT json_insert('{ "a" : 1 }', '$.b', json_array( 2, 3, 4 ) );

    結果:

    {"a":1,"b":[2,3,4]}

    配列の最後に値を追加する

    json_insert()を使用できます 配列の最後に値を追加します。

    これを行うには、[#]の配列インデックスを使用します :

    SELECT json_insert('[ 1, 2, 3 ]', '$[#]', 4 );

    結果:

    [1,2,3,4]

    同じ原則がネストされた配列にも当てはまります:

    SELECT json_insert('[ 1, [ "a", "b" ], 3 ]', '$[1][#]', "c" );

    結果:

    [1,["a","b","c"],3]

    無効なパス

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

    SELECT json_insert('{ "a" : 1 }', 'b', 2);

    結果:

    Runtime error: JSON path error near 'b'

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

    無効なJSONドキュメント

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

    SELECT json_insert('{ "a" : 1', '$.b', 2);

    結果:

    Runtime error: malformed JSON

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


    1. PostgresSQLのインストールに失敗しました:データベースクラスターの初期化に失敗しましたMAC os

    2. java.sql.SQLExceptionの取得:ResultSetを閉じた後の操作は許可されていません

    3. SQLiteDiskIOExceptionエラーコード10:ディスクI/Oエラー

    4. GROUP BYを使用して、列を結合/連結します