2023年7月8日土曜日

SQLite3 JSONの要素を置換する(json_replace())

概要

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]
                
  1. JSON Pathを指定して要素を入れ替える
  2. 存在しないJSON Pathを指定した場合何も起こらない
  3. JSONオブジェクトで置換したい場合はjson()などを使い、 JSONオブジェクトを引数にわたすこと。

参考URL