やってみる

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

SQLite3学習 JSON拡張(json_insert)

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

成果物

json_insert()

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

sqlite3

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

object

select json_insert('{}', '$.a', 1);
{"a":1}
  • キーは第二引数の末尾で指定せねばならない
  • バリューは第三引数で指定せねばならない

array

select json_insert('[]', '$[0]', 10);
[10]

インデックス値は最後尾のものでなければ反映されない。

select json_insert('[]', '$[1]', 10);
[]

 末尾以外(先頭や中間)に挿入しようとしても反映されない。

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

変化なし

object

select json_insert('{}', '$', 'A');
{}

 まあキーと値ではないから当然。

array

select json_insert('[]', '$', 'A');
[]

 配列の要素として末尾に追加されたりはしなかった。

重複追加・更新しない

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

 キーが既存なら重複追加も更新もされない。

キーにobjectやarrayを挿入する

select json_insert('{}', '$.root', json_object('node1',1));
{"root":{"node1":1}}
select json_insert('{}', '$.items', json_array(1,2,3));
{"items":[1,2,3]}

 挿入先がオブジェクトなら、第二引数の末尾に新規キーが必要。

配列にobjectを挿入する

select json_insert('[]', '$[0]', json_object('age',1,'name','yamada'));
[{"age":1,"name":"yamada"}]

 挿入先が配列なら、第二引数の末尾にインデックスが必要。それも配列の最後尾でなければならない。

所感

 やはり配列が扱いにくい。

情報源

対象環境

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

前回まで