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の形式が正しくないことを示しています。