Help us understand the problem. What is going on with this article?

SQLite3のJSON機能が便利だった

More than 1 year has passed since last update.

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と相性の良い言語では、これを使わない手は無いと思う

SoraKumo
TypeScriptでフロントエンドフレームワーク JWF(JavaScript-Window-Framework)を開発しています 世の中のWebシステムをSPA化するため、活動を続けています
https://ttis.croud.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした