SQLite3学習 JSON拡張(json_tree 配列→行)
配列→行ならjson_each
を使ったほうがいい。でもjson_tree
でもできる。
成果物
配列→行
ターミナルで以下コマンドを実行する。
sqlite3
対話モードにて以下コマンドをコピペし実行。
create table users(id int primary key, json text); insert into users values(1, '["A", "B"]'); insert into users values(2, '["C"]'); insert into users values(3, '[]'); .headers on .mode column select * from users, json_tree(users.json);
実行結果。
id json key value type atom id parent fullkey path ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 1 ["A", "B"] ["A","B"] array 0 $ $ 1 ["A", "B"] 0 A text A 1 0 $[0] $ 1 ["A", "B"] 1 B text B 2 0 $[1] $ 2 ["C"] ["C"] array 0 $ $ 2 ["C"] 0 C text C 1 0 $[0] $ 3 [] [] array 0 $ $
二次元配列
select * from users, json_tree((select json_tree.value from users, json_tree(users.json)));
インデントを入れると以下。配列の次元数だけjson_tree
(json_each
)をネストすることになる。
select * from users, json_tree(( select json_tree.value from users, json_tree(users.json) ));
id json key value type atom id parent fullkey path ---------- ------------------ ---------- ----------------- ---------- ---------- ---------- ---------- ---------- ---------- 1 [[1,2],["A", "B"]] [[1,2],["A","B"]] array 0 $ $ 1 [[1,2],["A", "B"]] 0 [1,2] array 1 0 $[0] $ 1 [[1,2],["A", "B"]] 0 1 integer 1 2 1 $[0][0] $[0] 1 [[1,2],["A", "B"]] 1 2 integer 2 3 1 $[0][1] $[0] 1 [[1,2],["A", "B"]] 1 ["A","B"] array 4 0 $[1] $ 1 [[1,2],["A", "B"]] 0 A text A 5 4 $[1][0] $[1] 1 [[1,2],["A", "B"]] 1 B text B 6 4 $[1][1] $[1] 2 [[3],["C"]] [[1,2],["A","B"]] array 0 $ $ 2 [[3],["C"]] 0 [1,2] array 1 0 $[0] $ 2 [[3],["C"]] 0 1 integer 1 2 1 $[0][0] $[0] 2 [[3],["C"]] 1 2 integer 2 3 1 $[0][1] $[0] 2 [[3],["C"]] 1 ["A","B"] array 4 0 $[1] $ 2 [[3],["C"]] 0 A text A 5 4 $[1][0] $[1] 2 [[3],["C"]] 1 B text B 6 4 $[1][1] $[1] 3 [] [[1,2],["A","B"]] array 0 $ $ 3 [] 0 [1,2] array 1 0 $[0] $ 3 [] 0 1 integer 1 2 1 $[0][0] $[0] 3 [] 1 2 integer 2 3 1 $[0][1] $[0] 3 [] 1 ["A","B"] array 4 0 $[1] $ 3 [] 0 A text A 5 4 $[1][0] $[1] 3 [] 1 B text B 6 4 $[1][1] $[1]
所感
やはり冗長なので配列のときはjson_each
のほうがいい。
情報源
対象環境
- 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 オブジェクトツリー→行)