概要
SQLiteでJSONオブジェクトに要素を追加する方法はいくつかある。
ここではjson_insert
について記載する。
構文
json_insert(JSON_OBJECT, JSON_PATH, INERT_OBJECT)
実行例
環境
- Windows 10 64bit
- SQLite3 (3.41.2) Command-Line Shell
配列の最後に要素を追加する。
配列の最後以外の場所に要素を追加することは出来ず、
追加出来なかった場合、エラーが出力されない。
sqlite> .log stderr
sqlite> -- # 1.
sqlite> select json_insert('[1,2]', '$[#]', 10);
[1,2,10]
sqlite> select json_insert('[1,2]', '$[2]', 10);
[1,2,10]
sqlite> select json_insert('[1,2]', '$[#]', 'text');
[1,2,"text"]
sqlite> -- # 2.
sqlite> select json_insert('[1,2]', '$[0]', 10);
[1,2]
sqlite> select json_insert('[1,2]', '$[1]', 10);
[1,2]
sqlite> -- # 3.
sqlite> select json_insert('[1,2]', '$[5]', 10);
[1,2]
sqlite> -- # 4.
sqlite> select json_insert('[1,2]', '$[#]', '{"A":100}');
[1,2,"{\"A\":100}"]
sqlite> select json_insert('[1,2]', '$[#]', json('{"A":100}'));
[1,2,{"A":100}]
- 配列の最後に要素を追加する
- 特定の位置に挿入したり置換したりすることは出来ない
- 存在しないパスを指定しても何も起きない
-
JSONオブジェクトを挿入したい場合は
json()
などを使い、 JSONオブジェクトを引数にわたすこと。
参考URL
-
The json_insert(), json_replace, and json_set() functions
https://www.sqlite.org/json1.html#the_json_insert_json_replace_and_json_set_functions -
# JSONPath - XPath for JSON
https://goessner.net/articles/JsonPath/