Hatena::Diary

はてなダイアリー - 無料で簡単。広告のないシンプルなブログをはじめよう!

 | 

2005-09-15

JSON in JavaScript


f:id:brazil:20050915032808j:image



JavaScriptは、 Netscape Navigator用のページスクリプト言語として広まった汎用のプログラミング言語です。Javaのサブセットであると広く信じられていますが、それは違います。Cのような構文ソフトオブジェクトをもつSchemeに類似した言語です。JavaScriptは、ECMAスクリプト言語仕様-第3版で標準化されました。


JSONの表記法は、JavaScriptリテラルオブジェクトの表記法のサブセットです。JSONJavaScriptのサブセットであるため、あれこれ悩まずにJavaScript言語で使用できます。


var myJSONObject = {"bindings": [
    {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
    {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
    {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
  ]
};

この例では、オブジェクトは単一のメンバ"bindings"を含んで生成されます。"bindings"は、3つのオブジェクトが入った配列を持ちます。そして、それぞれのオブジェクトは"ircEvent"、"method"、および"regex"メンバを含んでいます。


メンバは、ドット( . )または添字演算子( [ ] )を使って読み出せます。


  myJSONObject.bindings[0].method    // "newURI"

JSONテキストをオブジェクトに変換するには、eval()関数を使用してください。eval()はJavaScriptコンパイラを呼び出します。JSONは、JavaScriptの真のサブセット(真部分集合)なので、コンパイラは、正確にテキストを解析してオブジェクト構造を作り出します。


  var myObject = eval('(' + aJSONtext + ')');

eval関数は非常に高速です。しかし、どんなJavaScriptプログラムでもコンパイルし実行できるため、セキュリティに問題が生じる可能性があります。ソースを信頼できる場合のみ、eval関数を使用するのが望ましいです。基となるページとJSONのデータの両方を提供しているようなウェブアプリケーションの場合、このルールは一般的なことです。ソースは信頼できない場合があります。特に、クライアントを決して信頼するべきではありません。


セキュリティが心配ならば、JSON parserを使用したほうが良いでしょう。JSON parserは、JSONテキストだけを認識するため、はるかに安全です。


var myObject = JSON.parse(aJSONtext);

JSON stringifierは、反対に、JavaScriptのデータ構造をJSONテキストに変換します。JSONは循環データ構造に対応していないので、JSON stringifierに循環構造を入力しないように注意してください。


var myJSONText = JSON.stringify(myObject);

JSON parserとJSON stringifierのオープン・ソースコードが利用できます小さくすれば、たったの3Kbです。

JoeJoe 2007/08/18 23:51 × JSON parserは、JSONテキストを識別するだけなので
○ JSON parserは、JSONテキストだけを認識するので

brazilbrazil 2007/08/21 03:54 修正いたしました。ご指摘、どうもありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

 |