#前回の内容
SQLite3のJSON機能が便利だった
#JSON文字列を挿入してみる
前回は抽出時に複数のレコードの内容を一つのJSONテキストに変換できるという内容を取り扱った。そもそも記事にしたのはこんなに便利なのにjson_group_objectやjson_group_arrayの具体的な使い方が、検索に全然引っかからなかったためだ。今回はデータを挿入するときに便利なjson_eachについての内容を書いていきたい
##テーブル構造
create table json_table(name text primary key,value json)
前回同様、この形でテーブルを作る。nameがprimary keyになっているので、nameによる検索は高速に行うことが出来る。
##データの挿入
先ほど作ったテーブルにデータを挿入しようと思ったら以下のようになる。今回も上書き挿入を前提とするのでreplaceを使う。
replace into json_table values('a','{"c":789}');
replace into json_table values('b','456')
特に便利でも何でも無い。しかしjson_eachを使うと、以下のように書くことが出来る
replace into json_table select key,value from json_each('{"a":{"c":789},"b":456}')
テーブルの状態
name | value |
---|---|
a | {"c":789} |
b | 456 |
json_eachの中にJSON文字列を突っ込むだけで、一度の処理で複数レコードの挿入が可能になるのだ。JSONと相性が良い開発言語ならJSONにパースするメソッドを間に挟むだけで、変数のデータを一気に流し込むことが可能だ。しかもnameに関してはindexが効いているので、高速に取り出すことが出来る。
#まとめ
これだけ便利なのに、具体的な使い方が検索に引っかからない残念な状態となっている。他にも使い道を覚えれば便利に活用できる機能が埋もれている可能性があるので、引き続き色々と試していきたい。