JSONでデータを扱う
//オブジェクトは連想配列と同じで、キーと値のセットで表される { hensachi: '50' }
//配列はインデックス番号と値で表される [ 'hensachi', '50' ]オブジェクトと配列の違いは、配列だとfor文などで処理する要素の順番がインデックス番号通りに保証されているのに対し、オブジェクトはそうでないということです。オブジェクトの要素を取得するのにfor inループを使うことがありますが、オブジェクトに登録した順番通りの処理はブラウザで必ずしも保証されないようです。
//オブジェクトだと並べた要素の順番に処理されるとは限らない { namae: 'Tarou', hensachi: '50', yaruki: 'hutsuu' }
//配列はインデックス番号の順番での処理が保証される [ 'namae', 'Tarou', 'hensachi', '50', yaruki, 'hutsuu' ]データ構造をオブジェクトだけで表すことも可能ですが、複数のデータを登録する際は、ひとまとまりのデータをまずオブジェクトに入れて、それらを配列でリストにする方が見た目にも分かりやすく効率的です。
//このようにオブジェクトだけで記述する代わりに…… { 'Tarou': { shiboukou: 'kaisei', yaruki: 'hutsuu' }, 'Jirou': { shiboukou: 'nada', yaruki: 'takai' }, .......... .......... }
//個々のデータをオブジェクトに入れて、それらをリストにすると見た目にもすっきりします [ { namae: 'Tarou', shiboukou: 'kaisei', yaruki: 'hutsuu' }, { namae: 'Jirou', shiboukou: 'nada', yaruki: 'takai' }, { namae: 'Saburou', shiboukou: 'hibiya', yaruki: 'hikui' }, .......... .......... ]このようなデータ構造のデータを処理するとき、たとえばnamaeプロパティだけを取得したいというときは、次のようにfor-inではなくfor文を使います。
//生徒ごとの進路に関するデータ var shinroData = [ { namae: 'Tarou', shiboukou: 'kaisei', yaruki: 'hutsuu' }, { namae: 'Jirou', shiboukou: 'nada', yaruki: 'takai' }, { namae: 'Saburou', shiboukou: 'hibiya', yaruki: 'hikui' }, .......... .......... ]; var namaeList =[]; for (var index = 0; index < shinroData.length; index++) { namaeList[index] = shinroData[index].namae; } // namaeList ⇒ ['Tarou', 'Jirou', 'Saburou']また、Prototype.jsなどのJavaScriptライブラリには、こういうデータ構造を扱うイタレータが数多くあります。たとえば上の作業をPrototype.jsを使って処理するならば、
//生徒ごとの進路に関するデータ var shinroData = [ { namae: 'Tarou', shiboukou: 'kaisei', yaruki: 'hutsuu' }, { namae: 'Jirou', shiboukou: 'nada', yaruki: 'takai' }, { namae: 'Saburou', shiboukou: 'hibiya', yaruki: 'hikui' }, .......... .......... ]; //Prototype.jsのpluckメソッドは指定したプロパティの値だけ配列内から取得する var namaeList = shinroData.pluck('namae'); // ⇒ ['Tarou', 'Jirou', 'Saburou']このように一行で書くこともできます。 なお、JSON規格でコードを書く際は取り決めとして、オブジェクトのキーや、値をダブルクオテーション(")で囲うことになっています。シングルクオテーション(')で囲うのは正式ではないようです。
//個々のデータをオブジェクトに入れて、それらをリストにすると見た目にもすっきりします [ //キーと値をダブルクオテーションで囲ったところ { "namae": "Tarou", "shiboukou": "kaisei", "yaruki": "hutsuu" }, { "namae": "Jirou", "shiboukou": "nada", "yaruki": "takai" }, { "namae": "Saburou", "shiboukou": "hibiya", "yaruki": "hikui" }, .......... .......... ]なお、文字列以外の値(数値、ブール値(true/false)、ヌル(null)などはダブルクオテーションで囲う必要がありません。
[ { "namae": "Tarou", "hensachi": 50, "tokui": "suugaku" }, { "namae": "Jirou", "hensachi": 70, "tokui": "butsuri" }, { "namae": "Saburou", "hensachi": 30, "tokui": null }, .......... .......... ]