やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3学習 JSON拡張(json_remove)

 指定したJSONの指定したJSONパスへ、指定した値を代入する。

成果物

json_remove()

 ターミナルで以下コマンドを実行する。

sqlite3

 対話モードにて以下コマンドをコピペし実行。

object

select json_remove('{"a":1}', '$.a');
{}

 第二引数以降は好きなだけ追加できる。

select json_remove('{"a":1, "b":2, "c":3}', '$.a', '$.b');
{"c":3}
select json_remove('{"a":1, "b":2, "c":3, "d":4}', '$.b', '$.c', '$.d');
{"a":1}
  • キーは第二引数の末尾で指定せねばならない
  • 第二引数以降は好きなだけ追加できる

 指定したキーが存在しないときは無視して元のJSONを返す。

select json_remove('{}', '$.a');
{}
select json_remove('{"a":1}', '$.b');
{"a":1}

 大本を指定するとすべて削除された空文字が返る。

select json_remove('{"a":1}', '$');



array

select json_remove('[1]', '$[0]');
[]
select json_remove('[1,2]', '$[0]');
[2]
select json_remove('[1,2]', '$[1]');
[1]

 末尾インデックスが存在しないときは無視して元のJSONを返す。

select json_remove('[]', '$[0]');
[]
select json_remove('[1,2]', '$[2]');
[1,2]

 範囲外インデックスを指定したら無視して元のJSONを返す。

select json_remove('[]', '$[1]');
[]

 インデックスに負数を設定するとパースエラー。

select json_remove('[]', '$[-1]');
Error: JSON path error near '[-1]'

キーの値がオブジェクトのとき

select json_remove('{"a":{"name":"yamada"}}', '$.a');
{}

キーの値が配列のとき

select json_remove('{"a":[1,2]}', '$.a');
{"a":1}

配列の値がオブジェクトのとき

select json_remove('[{"a":1},{"b":2}]', '$[0]');
select json_remove('[{"a":1},{"b":2}]', '$[1]');
[{"b":2}]
[{"a":1}]

配列の値が配列のとき

select json_remove('[[1,2]]', '$[0][0]');
select json_remove('[[1,2]]', '$[0][1]');
[[2]]
[[1]]

所感

 変更箇所が1つのときはjson_set()json_remove()を使えば良さそう。

情報源

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで