JSONオブジェクトのキーバリューを取得するには?
JavaScriptを使用して、JSONオブジェクトのキーバリューとオブジェクトの長さを取得する方法です。 例を挙げます。
[
{
"amount": " 12185",
"job": "GAPA",
"month": "JANUARY",
"year": "2010"
},
{
"amount": "147421",
"job": "GAPA",
"month": "MAY",
"year": "2010"
},
{
"amount": "2347",
"job": "GAPA",
"month": "AUGUST",
"year": "2010"
}
]
ここでは、配列の長さは3で、値の取得は([0].amount)
でよく、インデックス[0]
には3つの名前と値のペアがあります。
だから、名前(amountとかjobとか、全部で4つの名前)を取得して、さらに名前がいくつあるかをカウントする必要があります。
20
3
Jsonは基本的にJavascriptの連想配列として表現されます。キーや値を読み取るためには、それらをループさせる必要があります。
まず第一に、あなたが扱っているのは「JSONオブジェクト」ではなく「JavaScriptオブジェクト」です。JSONはテキストの表記法ですが、もしあなたのサンプルコード(
[0].amount
)が機能するなら、あなたはすでにその表記法をJavaScriptのオブジェクトグラフにデシリアライズしています。(JSON](http://json.org)では、キーは二重引用符で囲む必要があります。あなたが引用したものは、JSONのスーパーセットであるJavaScriptオブジェクトリテラルです)。ここでは、この配列の長さは2です。
いいえ、3です。
そこで、名前(金額や仕事など、全部で4つの名前)を取得し、さらに名前がいくつあるかをカウントする必要があるのですが?
ECMAScript5を完全にサポートしている環境であれば、
Object.keys
(spec | MDN)を使って、オブジェクトの1つに対する列挙可能なキーを配列として取得できます。そうでない場合(あるいは、配列を取得するのではなく、単にループさせたい場合)は、for...in
を使用することができます。完全な動作例です。
生のオブジェクトを扱っているので、上記の
for...in
ループは問題ありません(誰かがObject.prototype
をいじったという罪を犯していなければですが、そうでないと仮定しましょう)。しかし、キーを取得したいオブジェクトが、そのプロトタイプから列挙可能なプロパティを継承している可能性がある場合は、hasOwnProperty
の呼び出しを追加することで、ループをオブジェクトのownキーのみに制限することができます(そのプロトタイプのキーではありません)。JSON表現を[パース]すると、それはオブジェクトのJavaScript配列になります。
このため、JavaScriptの配列の
.length
プロパティを使って、含まれている要素の数を確認したり、for
ループを使って列挙したりすることができます。