オブジェクトリテラルとJSON:続JavaScriptのオブジェクトについて
JavaScriptオブジェクトについてさらに高度な話題として「オブジェクトリテラル」と「JSON」についてお話ししたいと思います。
JSONとは
「オブジェクトリテラルとは何か」がわかったところで、JSONと言うデータ形式についてもお話ししておきましょう。 JSONとは、「JavaScript Object Notation(JavaScriptのオブジェクト表記法)」の略です。前述のオブジェクトリテラルも含め、JavaScriptにおけるオブジェクト表記方法をそのまま通信データの形式に用いると言うアイデアです。以下はWikipedia からの引用ですが、以下のデータ型をJavaScriptの表記法に則って記述することができます。
- 数値(整数、浮動小数点数)
- 文字列(バックスケープ記法を含む、ダブルクォーテーションで括った文字列)
- 真偽値(trueとfalse)
- 配列(データのシーケンス)
- オブジェクト(キーと値のペアの集まり。JSONではハッシュと等価)
- null
前述のオブジェクトリテラルも含めることができるので、非常に表現力豊かなデータ形式だということがお分かりでしょう。しかも、JSONは「eval()関数で評価すれば、簡単にJavaScriptオブジェクトに変換できる」と言う非常に便利な特徴を持つことから、Ajaxにおけるサーバとのデータやり取りではよく用いられます。そういった処理を擬似的に表した、以下の例を参照してください。
例: サーバから、以下のJSON文字列が返される(JSONのプロパティ名は文字列リテラルにする必要がある)。
{
"userId": 29,
"name": "白石",
"age": 67,
"parentIds": [122, 67]
}
Ajaxクライアントはeval()を用いてJavaScriptオブジェクトに変換し、利用する。
var responseText = ... (サーバからのレスポンス) ...
// 式として評価するため「( )」で囲み、eval()実行
var user = eval("(" + responseText + ")");
// プロパティにアクセス
alert(user.name);
こぼれ話:オブジェクトリテラルに関するブラウザ間の違い
オブジェクトリテラルは、プロパティ(キー : 値)同士をカンマで区切って指定します。この際、「最後の要素の後ろにカンマを許容するかどうか」と言う部分が、ブラウザごとに異なります。
var obj = {
var1: "変数1",
var2: "変数2", // 末尾のカンマを許容するか?
};
本来ここにはカンマを許容しないのが文法上正しいのですが、IE以外のブラウザ(FirefoxやSafari)では、利便性のために許容しています。オブジェクトのプロパティをごちゃごちゃいじっていると、末尾にカンマが残ってしまうことはよくあります。ほかのブラウザでは動作するのに、IEだとスクリプトエラーになる、と言う場合は、末尾のカンマが原因なこともしばしばです。チェックしてみるとよいでしょう。
まとめ
今回は、JavaScriptオブジェクトの話の続きとして、オブジェクトリテラルとJSONについてお話ししました。次回はin演算子を紹介して、JavaScriptのオブジェクトに関する話をいったん終わりにします。
- 2人の推薦記事
- 2人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(1)
- 特集: JavaScriptのイロハ (17件)
- 今日のトップ記事
- 2日前
- 4日前
- 6日前
- 7日前
- ホワイトペーパー
- 読者投票
- 話題のタグ
MS、Vistaとの互換性をチェックできる「Compatibility Center」リリースへ
「似非」SOAを見破る10の方法
Firefox 3のアドオンやテーマ管理を容易にする
openSUSE 11.0を試してみた
フォトレポート:世界各国の優秀な技術者がパリに集結--Imagine Cup 2008世界大会
バッチ処理でデータベース活用:4つの課題と5つの解決ポイント
Rubyでどう書く?:RubyでWord文書を作成する
今知るべき仮想化情報
ZDNet Japan Green IT
Techno Exchange
DELL連載第4回〜「Microsoft System Center」
「未来の、その先」をどう提言していくか