SQLite3のJSON機能が便利だった

SQLite3のJSON機能が便利だった:


SQLite3のJSON

SQLite3.9からJSON関連の機能が追加されたのはSqlite 3.9 の Json1を試した で詳しく紹介されている

 今回、Node.jsでプログラミングしている際、データの保存を簡単にできないかと試していたら、SQLiteのJSONが想像以上に便利だったので、その部分を伝えたい


 1.テーブルの作成

create table json_table(name text primary key,value json) 
単純なテーブルの作成。データの型をjsonにしているが、SQLiteでは現時点でテキストデータとして保存される


 2.データの挿入

replace into json_table values('aaaa',json_array(1,2,3)); 
replace into json_table values('bbbb',json_object('あいうえお','ABC')); 
replace into json_table values('cccc','{"abcd":123}') 
insertではなくreplaceで挿入しているのは、Node.jsからデータを書き換える際に変数のように使用するためだ。他のDBにも上書き挿入はあるが、SQLiteのreplace文が一番扱いが簡単だ

 ちなみにJSONのデータを入力する際は、json_arrayやjson_objectで入れても良いし、文字列の形でもかまわない


 3.データの抽出


  3.1普通にselect

select * from json_table 
name value
aaaa [1,2,3]
bbbb {"あいうえお":"ABC"}
cccc {"abcd":123}
普通にselectすると普通に結果が返ってくる。jsonなので、受け取るときの形式は文字列だ


  3.2オブジェクト一つにまとめて抽出

select json_group_object(name,json(value)) from json_table 
json_group_object(name,json(value))
{"aaaa":[1,2,3],"bbbb":{"あいうえお":"ABC"},"cccc":{"abcd":123}}
今回、無茶苦茶便利だと思った結果がこれだ。json_group_objectを使うと、複数のレコードを1つのJSONオブジェクトとしてまとめてくれる。たったこれだけと思うかもしれない。しかし受け取り側で余計な処理を加えずに、一発でデータを取得できるのはとにかく便利なのだ


  3.3配列一つにまとめて抽出

select json_group_array(json_object(name,json(value))) from json_table 
json_group_array(json_object(name,json(value)))
[{"aaaa":[1,2,3]},{"bbbb":{"あいうえお":"ABC"}},{"cccc":{"abcd":123}}]
複数の結果を配列一つにまとめて返す。これも便利なので、そのうち使うことがあるかもしれない


 まとめ

JSONを扱うことに関しては、NoSQL系のDBを選択した方が便利かもしれない。しかしSQL系のDBもJSON機能が当たり前のように使えるようになった現在、後者を使った方が速度と利便性の良いとこ取り出来るのだ。特にJSONと相性の良い言語では、これを使わない手は無いと思う

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)