やってみる

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

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のほうがいい。

情報源

対象環境

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

前回まで