かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

JSON形式のススメ

最近、Ajaxアプリを作るときのデータ形式にJSONフォーマットが使用される事が増えてきました。そこでJSONとは何ぞや?という人向けに簡単に解説します。

JSON形式はRFC4627でも定義されている形式で、JavaScript Object Notationの略です。データ構造を表現する為に使用でき、JavaScriptではeval関数でそのまま評価できる形式になっています。ただし、JavaScriptに依存しない形式と定義されていて、実際に各言語向けのパーサやシリアライザが公開されています。

実際は以下のような感じで記述されます。

扱えるデータ型は文字列型、数値型、ブール型、配列型、オブジェクト型、nullだけで、配列型とオブジェクト型はどのようにネストしても構いません。JavaScriptでは以下のような感じで使えます。(Ajaxによって上記データがサーバより送信されたと想定します)

と、こんな感じでAjaxで受信した後のコードが非常にシンプルになります。通常ブラウザはクロスドメインでは利用できないので、外部のユーザが自由にJSON形式を編集できないようなサイトであれば、eval関数で評価するだけでよくなります。ただしクロスドメインで利用できる場合は危険が伴いますので、事前にバリデーションしてから評価する必要があります。バリデーションもJSON向けのライブラリには含まれていることが多いです。

ちなみに何故JSON形式をeval関数で評価すると危険なのかというと、クロスドメインでJSONデータを取得して評価する場合、そのJSONデータに悪意のある関数が含まれていると、そのユーザで実行されてしまうのです。

GoogleのGmailのJSONデータが有名ですが、Gmailの場合、JSONデータの先頭にwhile(1);が付いています。何も知らずにクロスドメインで取得して評価すると無限ループに陥ります。有名な手法なので先頭の文字を除去してから評価すればよいのですが・・・

実は1つ前のブログに書いたベータリリース予定のサイトでも使っています。サーバ側はブラウザからREST形式でリクエストを受け取って業務処理を行い、ブラウザに対してJSON形式で返すようにしています。JSON形式を作成する為に、JavaのJSONシリアライザを手作りしました。

さらにJSON他にJSONPという形式がありますが、これについては今度書きます。

投稿日時 : 2007年4月12日 23:27

Feedback

# re: JSON形式のススメ 2007/04/13 9:27 かずくん

個人的に、WEB系じゃなくても、XMLよかJSONのほうがよくね?
と思う今日この頃。

# re: JSON形式のススメ 2007/04/13 10:00 かつのり

私はJSON派なのですが、
未だにXMLRPC系のライブラリの方が多い現実を考えると、
サーバサイドでは馴染まないのでしょうね。

# re: JSON形式のススメ 2007/04/13 12:20 かずくん

> サーバサイドでは馴染まないのでしょうね。
Ruby on RailsによるYAMLのように、JSONを強く牽引してくれるフレームワークが現れないと、だめなんだろうなぁ。きっと。

# XWVEtVqWocOjlZzF 2014/08/28 7:23 http://crorkz.com/

JFU7W3 I take pleasure in, result in I found just what I used to be having a look for. You have ended my four day long hunt! God Bless you man. Have a great day. Bye

タイトル
名前
Url
コメント