JSON マブい

AJAX方面で、よくつかわれているJSONというデータ記述形式がある。

 JavaScript Object Notation - Wikipedia

  http://ja.wikipedia.org/wiki/JavaScript_Object_Notation

3年前に、FlashとWebサーバを通信させようとしてるときに存在は知っていたのだけれど、そのときはXML-RPCを選択した。JSONのWebサイトでいまいち使いかたを理解するまで行かなかったというのと、そのプロジェクトで使うには、知るのが遅すぎた。

で、ここのところ JavaScript をわりとじっくり触っていて、JSONの有用性をやっと理解してきた。なんじゃこりゃすげーなばっきゃろー。

 ・JSONは、JavaScriptの文法に即している。

 ・JSONでかかれたデータ構造は、JavaScriptパーサがそのまま変数として利用できる。

 ・動的にテキストをソースとして読み込む eval 関数を使えば、JSONテキスト形式がそのままJavaScriptのネイティブのデータ構造として変数にセットされる(こともできる)。

 ・JavaScriptは、ハッシュ(Object型)、配列、およびプリミティブな型(数値、文字列、日付とか)を持っているので、JSONはそれを表せる(プリミティブ型の静的型付は明示的にはできない・・・そんなのしたくもないけど)。

JavaScriptJSONを読み込むこと自体は、通常のJavaScriptソース解析なので、標準的についている機能である。動的言語なので、ランタイムについている。しつこいけど、JSONのデシリアライズは標準で言語機能として実装されているのである。シリアライズはついてないので書くかライブラリを使う必要がある。自明だけど、シリアライズの方がコーディングはくらべものにならないぐらい楽だ。

- - -

さて、JSONの使いかたについて、JavaScriptソースで例をあげとく(お茶を濁す程度ですみません)。

var myJSONdata = {

"apple" : 1,

"gorilla" : 2,

"rapper" : 3

};

という感じで変数を作ると、

myJSONdata.apple    => 1

myJSONdata.gorilla   => 2

myJSONdata.rapper    => 3

という感じでアクセスできる。

ってことで最初のソースを、XMLHttpRequestでとってきて、文字列Aにいれて、

eval(A);

とすると、2番のソースのようなアクセスが出来るようになる。

あと、HTMLの script タグをつかって、外部JavaScriptとして最初のソースを読み込むこともできる(この場合同一サイトでないサイトのJavaScriptも読み込める = セキュリティには注意)。

で、最近のウインドウズ(2000以降)にはWindowsScriptingHost(WSH)という、JavaScriptも読み込めるデスクトップ言語ランタイムが入っているので、ここでもJSONは使える。

RubyPerl方面には、YAMLというマークアップ言語仕様があり、JSONはほぼそのままYAMLとして読み込めるようだ。

CSVの各行の両端に括弧、行末にカンマをいれ、全体を括弧で囲うと JSONデータになりそうな感じである(完全かどうかわからない。例外あるかも)。

これは便利だ。

きっとなにも新しくない道具なんだと思うけれど、かえってそれがすごいな、と感じる。

XML開発者の日」とか「XML専業ベンダー」とか「高速XMLパーサ」というのはあるけれど、JSONは当り前すぎてそういうのが発生しそうにない気がする。

- - -

ちなみに文字コードJavaScriptが読み込めればなんでもよいと思われるが、UTF-8が常識的っぽい。まあ、流通させなければ好きにしたらいいという気もする。