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

SQLite JSON_SET()

    SQLite json_set() 関数を使用すると、JSONドキュメントの値を挿入または置換できます。

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

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

    構文

    これは次のように機能します:

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

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

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

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

    結果:

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

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

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

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

    結果:

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

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

    値を置き換える

    キーがすでに存在する場合、その値は新しい値に置き換えられます:

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

    結果:

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

    これがjson_set()の主な違いです およびjson_insert()json_insert() キーがすでに存在する場合、関数は値を挿入しません。

    値を置き換える別の方法は、json_replace()を使用することです。 。

    オブジェクトを挿入

    JSONオブジェクトを挿入する例を次に示します。

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

    結果:

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

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

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

    結果:

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

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

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

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

    結果:

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

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

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

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

    結果:

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

    配列を挿入

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

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

    結果:

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

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

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

    結果:

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

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

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

    結果:

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

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

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

    結果:

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

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

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

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

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

    結果:

    [1,2,3,4]

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

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

    結果:

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

    配列要素を置き換える

    json_set()を使用できます 配列内の要素を置き換えるには:

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

    結果:

    [1,4,3]

    配列はゼロベースであるため、[1] 2番目の配列項目を示します。

    json_replace() 関数を使用して、既存の要素を置き換えることもできます。繰り返しますが、これはjson_insert()とは異なります 、既存の要素を置き換えません。

    無効なパス

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

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

    結果:

    Runtime error: JSON path error near 'b'

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

    無効なJSONドキュメント

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

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

    結果:

    Runtime error: malformed JSON

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


    1. GreenDAOは、テーブル間の複数の関係をサポートします

    2. MariaDBINTERSECTオペレーターの説明

    3. MySQLデータベースからhtmlドロップダウンリストへのデータのフェッチ

    4. MySQLの日付形式指定子のリスト