あどけない話

インターネットに関する技術的な話など

JSON

JSONP とは一体何か教えてと言う友達がいるので、まず JSON から説明したいと思います。(その友達は、JSONJSONP の区別がついていませんでした。。。)

JSON は、偉大なる Crockford先生が RFC 4627で定めた JavaScript 用のデータ形式です。Web サーバとブラウザの間でデータを交換する際に、そのデータ形式として使われることが多いです。

ちなみに JSON とは、JavaScript Object Notation の略称です。

JavaScript をよく知らない人のために

Java はよく知っているけど、JavaScript は知らないという人にとって、オブジェクトがリテラルで書ける、つまり new なんかせずともプログラム中に記述できると言うとビックリするかもしれません。何を隠そう、JavaScript のオブジェクトとは連想配列(ハッシュ)なのです。連想配列なら、リテラルで書けそうでしょう?

JSON とは、大雑把に言えば JavaScript のオブジェクト・リテラルそのものです。以下に JSON の例を挙げておきます。

{
    "name": "Yamamoto",
    "age": 37
}

YAML を知っている人なら、YAML のサブセットだと思ってもいいでしょう。

JavaScript を知っている人のために

JSON では、JavaScript のオブジェクト・リテラルにいくつか制約が加わっています。

  • キーの部分はダブルクオートで囲まれた文字列です。
    • シングルクオートで囲んではいけません。
    • クオートのない識別子もダメです。プログラム中のオブジェクト・リテラルは、キーを識別子で書く方が一般的ですが、JSON ではダブルクオートで囲む必要があります。
  • 値として関数は書けません。
  • 値に出てくる文字列もダブルクオートで囲みます。
    • シングルクオートで囲んではいけません。
  • JSON だけではなく、オブジェクト・リテラルでもそうですが、最後の要素にカンマを付けてはいけません。
悪い例
{
    name: "Yamamoto", // キーはダブルクオートで囲まないといけない
    "getName": function() { return this.name; }, // 関数を書いてはならない 
    "age": 37,     // 最後にカンマを書いてはいけない
}

構文チェック

自分の書いた JSON が正しいか調べるには、JSLintを使って下さい。