Jaql(a query language desired for JSON:JSON用に位置づけられたクエリ言語)は、JSON型式のデータを処理するためのクエリ言語で、Apache HadoopのMapReduceを処理するための実装が存在します。日本語では「じゃっくる」と発音します。ジャッカルに似ているため、一部のサイトにはジャッカルの写真が掲載されていました。
もともとはIBMのアルマデン研究所で研究・開発され、オープンソースへ提案されました。本原稿執筆時点では、Apache Incubatorプロジェクトになっており、Google Codeのサイトで開発が進められています。
本記事執筆時点では、つい先頃リリースされた、Jaql 0.5.1をベースに解説しています。
1. JSONの基礎
JSON(JavaScript Object Notation)は、JavaScriptで「オブジェクト」と呼んでいるデータの塊を表記する方法を指しています。JavaScriptのオブジェクトは、大きく分けると、「名前:値」のペアを複数持つものと、「配列」の2種類があります。
名前と値のペアは、コロン「:」でつなぎ、カンマ「,」で区切って並べ、{ と } で全体を囲むとオブジェクトとなります。
{ "name":"米持幸寿", "address":"東京都" }
ダブルクォート、またはシングルクォートが使い分けられます。名前はクォートなしでも多くの場合動作しますが、仕様(RFC4627)上はクォートで囲むのが正式です(もとになったECMAScriptでは許可されているため、多くの実装でクォートなしでも動作します)。値には、例にあるようにテキストや数値が使えます。値にオブジェクトを付けることもできます。JavaScriptでは、関数もオブジェクトなので、関数を値として接続することも可能です(ただし、JSON/Jaqlの世界では関数は操作しません)。
{ "person" : { "name" : "米持 幸寿", "address" : "東京都" }, alertme : function() { alert(this.person.name + "は" + this.person.address+"勤務") } }
リスト2のオブジェクトを変数yoneに代入し、yone.alertme()と実行(全体を<script>タグで囲んでWebブラウザで開くなど)すると「米持幸寿は東京都勤務」と表示されます。
配列は、[ と ] で全体を囲み、値、オブジェクトなどを、カンマ「,」で区切って並べます。
[1, 2, 3, 4]
異なるオブジェクトを配列として並べることもできます。
[ 1, "a", { "name": "米持 幸寿", "address" : "東京都"} , function() { alert('test');} ]