指定した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"}]
挿入先が配列なら、第二引数の末尾にインデックスが必要。それも配列の最後尾でなければならない。
所感
やはり配列が扱いにくい。
情報源
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習をはじめよう
- SQLite3学習 SQLiteについて
- SQLite3学習 SQLiteの適切な用途
- SQLite3学習 SQLiteの特徴
- SQLite3学習 SQLiteのクセ
- SQLite3学習 データ型とアフィニティ
- SQLite3学習 演算子の一覧
- SQLite3学習 よくある質問
- SQLite3学習 SQLiteダウンロード&コンパイル
- SQLite3学習 Tclで操作する
- SQLite3学習 ビルドオプション動作確認(SQLITE_ALLOW_URI_AUTHORITY)
- SQLite3学習 面白そうなコンパイルオプション
- SQLite3学習 SQLiteの拡張について
- SQLite3学習 JSON拡張
- SQLite3学習 JSON拡張(json_extract)
- SQLite3学習 JSON拡張(json_each)
- SQLite3学習 JSON拡張(json_tree オブジェクト→行)
- SQLite3学習 JSON拡張(json_tree オブジェクトツリー→行)
- SQLite3学習 JSON拡張(json_tree オブジェクト配列→行)
- SQLite3学習 JSON拡張(json_group_array 行→配列)
- SQLite3学習 JSON拡張(json_group_object 行→オブジェクト)
- SQLite3学習 JSON拡張(json_array_length)
- SQLite3学習 JSON拡張(json_type)
- SQLite3学習 JSON拡張(json_valid)
- SQLite3学習 JSON拡張(json_quote)
- SQLite3学習 JSON拡張(json_array)
- SQLite3学習 JSON拡張(json_object)
- SQLite3学習 JSON拡張(json_patch)