JSONとはJavaScript Object Notationの略で、JavaScriptとの親和性が非常に高いデータ交換フォーマットである。
詳しくは↓
The application/json Media Type for JavaScript Object Notation (JSON)
Introducing JSON (→日本語翻訳ページ)
JSON in JavaScript (→日本語翻訳ページ)
JSONは、前回の記事で書いたオブジェクトの表記方法を応用している。
種を明かせば、例のオブジェクト表記方法を文字列化してデータのやり取りを行い、JavaScriptのeval関数でJavaScriptコードに変換(=オブジェクトに変換)するという仕組み。eval関数にJSONを渡す際は、JSONを文字列"()”で囲む必要がある。
ただ、気をつけなければいけない点がいくつか。
- プロパティ名(リンク先に倣えば"名前")は、文字列として記述すること。
- オブジェクト(リンク先に倣えば”値”)には、数値,Boolean値,文字列,null参照、またはこれらのみで構成される配列,オブジェクトのみ許可されている。当然だけど関数はダメ。
eval関数の性質上、これらを無視してもオブジェクトに変換することはできるが、極端な話それはJSONとは言えない。
ちなみに、JSONファイルの拡張子は.jsonである。
JSON形式のファイルを記述する例を以下に記述する。
Hoge.json{
"piyo": "test",
"hogera":
{
"foo": true,
"bar": [10, 20, 30, 40, 50]
}
}
Hoge.jsonをJavaScriptコードで扱う例を以下に記述する。
Hoge.jsonを扱う例function jsonControlSample(json)
{
var hoge = eval("(" + json + ")");
var message = "";
message += hoge.piyo + "¥r¥n";
message += hoge.hogera.foo + "¥r¥n";
for (var i = 0; i < hoge.hogera.bar.length; i++)
{
message += hoge.hogera.bar[i] + "¥r¥n";
}
alert(message);
}
なお、eval関数は文字列をJavaScriptのコードに変換(して実行)する関数であるため、受け取ったJSONの中身が実は危険なJavaScriptコードを文字列化したものであったりしても、そのままコードが実行されてしまう。冒頭のリンク先にも書いてある通り、eval関数を用いるより、json.jsのJSON parserを使用した方が安全である。json.jsには、JavaScriptのオブジェクトをJSONに変換するJSON stringifierも含まれている。