概要
SQLiteでJSONオブジェクトに要素を置換する方法はいくつかある。
ここではjson_replace
について記載する。
構文
json_replace(JSON_OBJECT, JSON_PATH, INERT_OBJECT)
実行例
環境
- Windows 10 64bit
- SQLite3 (3.41.2) Command-Line Shell
配列の要素を置換する
指定されたJSON Pathが存在しなかった場合は何もされず、
エラーメッセージも出力されない。
sqlite> .log stderr
sqlite> -- # 1.
sqlite> select json_replace('[1,2]', '$[0]', 10);
[10,2]
sqlite> select json_replace('[1,2]', '$[1]', 10);
[1,10]
sqlite> -- # 2.
sqlite> select json_replace('[1,2]', '$[#]', 10);
[1,2]
sqlite> select json_replace('[1,2]', '$[5]', 10);
[1,2]
sqlite> -- # 3.
sqlite> select json_replace('[1,2]', '$[0]', '{"A":100}');
["{\"A\":100}",2]
sqlite> select json_replace('[1,2]', '$[0]', json('{"A":100}'));
[{"A":100},2]
- JSON Pathを指定して要素を入れ替える
- 存在しないJSON Pathを指定した場合何も起こらない
-
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/