概要
json_patch()
を使用すると
2つのJSONオブジェクトをマージ(統合)することが出来る。
構文
json_patch(JSON_OBJECT1, JSON_OBJECT2)
- JSON_OBJECT1
- 元のJSONオブジェクト
- JSON_OBJECT2
- JSON_OBJECT1に統合するJSONオブジェクト
実行例
環境
- Windows 10 64bit
- SQLite3 (3.41.2) Command-Line Shell
基本的な使い方
sqlite> .nullvalue [null]
sqlite> -- # 1.
sqlite> select json_patch('{"a":100, "b":200, "c":300}', '{"c":303, "d":400}');
{"a":100,"b":200,"c":303,"d":400}
sqlite> select json_patch('{"a":100, "b":200, "c":300}', '{"d":400, "e":500}');
{"a":100,"b":200,"c":300,"d":400,"e":500}
sqlite> select json_patch('{"a":100, "b":200, "c":300}', '{"d":400}');
{"a":100,"b":200,"c":300,"d":400}
sqlite> -- # 2.
sqlite> select json_patch('{"a":100, "b":200, "c":300}', '{"b":null}');
{"a":100,"c":300}
sqlite> select json_patch('{"a":100, "b":200, "c":300}', null);
[null]
sqlite> -- # 3.
sqlite> select json_patch(
...> '{
...> "a":{
...> "b":200,
...> "c":300
...> }
...> }',
...> '{
...> "a":{
...> "b":202,
...> "c":null,
...> "d":400
...> }
...> }'
...> );
{"a":{"b":202,"d":400}}
- 連想配列のキーを基準に1つ目のJSONに対しの2つ目のJSONをマージする
- nullを指定するとキーに一致する要素は削除される
- 階層構造も統合される
第1引数と第2引数が連想配列でない場合 マージされない
sqlite> -- # 1.
sqlite> select json_patch(1, '{"a":100, "b":200}');
{"a":100,"b":200}
sqlite> select json_patch(true, '{"a":100, "b":200}');
{"a":100,"b":200}
sqlite> select json_patch('[0, 1, 2, 3]', '{"a":100, "b":200}');
{"a":100,"b":200}
sqlite> -- # 2.
sqlite> select json_patch('{"a":100, "b":200}', '[0,1]');
[0,1]
sqlite> select json_patch('{"a":100, "b":200}', 1);
1
sqlite> select json_patch('{"a":100, "b":200}', true);
1
sqlite> select json_patch('[0,1,2,3]', '[4,5]');
[4,5]
sqlite> -- # 3.
sqlite> select json_patch('test', 'test');
Runtime error: malformed JSON
- 第1引数が連想配列でない場合、第2引数で全て置換される
- 第2引数が連想配列でない場合、第2引数で全て置換される
- 第1引数がJSONに変換出来ない場合、エラーとなる
参考URL
-
The json_patch() function
https://www.sqlite.org/json1.html#the_json_patch_function -
JSON Merge Patch
https://datatracker.ietf.org/doc/html/rfc7396