![]() |
secretGeek |
JavaScriptではJSON形式でデータを保持しておくことが多い。シンプルで扱いやすく、evel()で評価するだけでオブジェクトとして取り込むことができる。入出力も簡単で、JavaScript以外の言語でもJSON形式のデータを扱う機会が増えている。
このJSONデータを操作するためのエンジンのひとつにJSONクエリエンジン、またはJSONクエリ言語、JSONクエリライブラリと呼ばれるものがある。JSONデータから特定のデータを抜き出して別のJSONオブジェクトを生成するといったもので、ブラウザ側でデータの整形をする場合などに利用できる。たとえばサーバからデータをJSON形式でダウンロードしておき、実際に表示するデータは条件に応じてJSONクエリエンジンが選別したものを表示する、といった使い方ができる。
JSONクエリエンジンが採用しているクエリ言語は多種多様だ。SQLに似た文法を採用したものや、LINQを採用したもの、独自形式、SQLとLINQまたはJSONを組み合わせたものなどさまざまなものがある。提供している機能も多種多様で、それぞれに特徴がある。JSON Query Languages: 5 special purpose editors - secretGeekに5つのJSONクエリエンジンとその得手不得手が紹介されている。JSONクエリエンジンのまとめ資料として参考になる。紹介されているJSONクエリエンジンは次のとおり。
SQLike
JOINシンタックスが秀逸。LINQよりもどちらかというとSQLのメタファーを採用しており、より多くのプログラマにとって馴染みやすい。反面記述方法が若干煩雑なところがあり、特定のキーワードをパイプでくくる必要があったり、関数の記述が若干面倒なものになっている。クエリそのものがJSONを使って構造化されているところが興味深い。
JsLinq
LINQの表記にもっともよく従った実装になっている。反面、JOINシンタックスはSQLikeほどは徹底していない。LINQ (Language Integrated Query; 統合言語クエリ)はさまざまなデータソースに対して汎用的に利用できるように設計されたクエリ言語。SQLがデータベースに対するクエリ言語であるのと比べて、LINQはデータソースの種類を選ばずに使えるように設計されているという違いがある。
JSinq
クエリをJavaScriptのコードとしてではなく、純粋に文字列で構成されたクエリとして記述できるという特徴がある。クエリの作成と実行を別ステップを実施することができ、プログラミング的に扱いやすい。ただしこれは利点である反面、欠点としての側面ももっている。
JLinq
徹底的に述語関数を使って記述するスタイルになっている。現実的な関数が用意されており扱いやすい。JOIN機能は用意されておらず、代わりにunion()で結合してから、そのあとで必要なものを切り出すといった記述をすることになる。
JimmyLinq
とてもシンプルなJSONクエリエンジン。ほかのJSONクエリエンジンと比較すると提供している機能が少ない。自分でJSONクエリエンジンを実装する場合に最初に参考にするプロダクトとして活用できるのではないかという説明がある。
JSON Query Languages: 5 special purpose editorsではそれぞれのJSONクエリエンジンを紹介するとともに、そのJSONクエリエンジンを使ったサンプルページが用意されている。実際にどういったクエリでデータを操作するのかがまとまっていて参考になる。