JSON
JSON は JavaScript Simple Object Notation の略称で JavaScript のオブジェクト表現を利用したテキストベースのデータ交換フォーマットである。JavaScriptのみならず各種言語でJSONフォーマットを利用するライブラリが用意されているのでXMLより手軽にデータ交換ができる。JavaScriptとの相性が抜群に良いため、WebアプリケーションのAjaxでのレスポンスデータ形式としてよく利用される。
MIME TYPE は RFC 4627 によると application/json である。ファイルの拡張子は .json である。
フォーマット
{"プロパティ名":"値" [, "プロパティ名":"値" ] }
プロパティ名は二重引用符で囲む(JavaScriptのオブジェクト表現では不要なため、忘れがちでエラーの原因となるので注意)。値が文字列の場合は同じく二重引用符で囲む。値が数値の場合は不要。複数のプロパティを持つ時は , で区切る。配列は [ ] で表現する。
{ "hoge" : "ほげほげ", // 文字列 "fuga" : 0.1, // 数値 "piyo" : [1,2,3,4], // 配列 "moge" : { "str":"あ", "num": 5 }, // ハッシュ、辞書、連想配列 "buri" : true, // 真偽値 true or false "gebe" : null // NULL }
文字列はUTF-8でエンコードする。日付データは 2010-02-14T12:35:31.200Z のようなISO8601形式の文字列で交換することが望ましい。
JavaScriptでの利用
JavaScriptのオブジェクト表現であるため、JSONフォーマットの文字列をevalすれば直接オブジェクトに変換できるが、意図しない関数を潜り込ませる事ができる等のセキュリティ上の観点から推奨されない。JSON2ライブラリを使ってパースすることが推奨される。
var obj = JSON.parse('{"hoge":"ほげほげ"}'); alert(obj.hoge); // 'ほげほげ' と表示
オブジェクトをJSON文字列に変換するにはstringifyを使う
var json = JSON.stringify({"hoge":"ほげほげ"}); alert(json);
ネイティブサポート
Firefox 3 等のブラウザではJSONがネイティブサポートされており、JSON2ライブラリなしで全く同じコードで処理できる。JSON2ライブラリは、既にJSONオブジェクトが定義されている場合は再定義しないので、JSON2を読み込んでもネイティブ実装が使用される。
2010年2月現在、アップデートによってIE8がネイティブ対応し、主要なブラウザはすべてJSONをサポートした。
ライブラリのサポート
jQueryやprototype.jsなどはjson形式のデータをAjaxで受け取って利用可能。
利用法
HTML5のクライアントストレージには文字列しか保存できないので、オブジェクトを保存する場合には一度JSON文字列に変換するといいだろう。