我有一个看起来像这样的JSON对象:
var json = {
"cj-api": {
"products": [
{
"$": {
"total-matched": "231746",
"records-returned": "999",
"page-number": "1"
},
"product": [ {... // contains lots objects with the data I'd like to access } ]
如上所述,我想访问product
对象数组。我似乎无法做到这一点。我试过了:
console.log(json['cj-api']['products'][0]['product']);
但我得typeError: Cannot read property 'products' of undefined
。
访问product
数组的正确方法是什么(注意,单数product
,而不是products
)。此数据来自外部源,因此我无法更改cj-api
中的连字符。
编辑:这是json
的原始控制台日志的样子:
{"cj-api":{"products":[{"$":{"total-matched":"231746","records-returned":"999","page-number":"1"},"product":[{ << lots of data in here>>
编辑2:为了进一步澄清,我在将一些XML放入XML2js之后运行JSON.stringify(result)
来获得此对象。
答案 0 :(得分:0)
我尝试了以下JSON结构:
var json = {
"cj-api": {
"products": [
{
"$": {
"total-matched": "231746",
"records-returned": "999",
"page-number": "1"
},
"product": [
{
"a": "a",
"b": "b",
"c": "c"
}
]
}
]
}
};
使用日志语句:
console.log(json['cj-api']['products'][0]['product']);
结果如下:
[对象{a =&#34; a&#34;,b =&#34; b&#34;,c =&#34; c&#34;}]
答案 1 :(得分:0)
你访问json的方式是绝对正确的。这是为了调试。尝试
console.log(json['cj-api']); console.log(json['cj-api']['products']); console.log(json['cj-api']['products'][0]); console.log(json['cj-api']['products'][0]['product']);
哪一行返回undefined
意味着你的json在那里被打破。
如果这不起作用,那么您需要检查其他类似的键。也许他们认为你想要找到的是实际上 undefined
。
也许你正试图循环。如果您正在检查条件if (JSONStructure[key]==undefined) console.log("Undefined at position ...")
。这是如果你有有效JSON的唯一方法。
答案 2 :(得分:0)
typeError: Cannot read property 'products' of undefined
表示json
存在,但json['cj-api']
未定义。如果您确定使用正确的变量名称,我认为这可能是一个范围问题,您使用的是另一个变量而不是您想要的变量。 json
可能是json字符串,而不是类似数组的对象。尝试重命名您的变量,看看您是否仍然遇到此问题。否则,不会自动为您解析字符串,您必须使用JSON.parse( ... )
对其进行解析。
编辑:
var json = '{ "me": "be an evil string" }';
console.log( json ); //'{ "me": "be an evil string" }'
console.log( json['me'] ); //undefined
console.log( JSON.parse( json )['me'] ); // 'be an evil string'
答案 3 :(得分:0)
由于您的问题缺少最后一个
}
]
}
}
和其他人在这里改变了你的例子并使其成功,你试图纠正它吗?
如果没有,那么我建议您或数据提供者更正回复的结构。
答案 4 :(得分:-2)
我在json结构下面尝试了
var json={
"cj-api": {
"products": [
{
"$": {
"total-matched": "231746",
"records-returned": "999",
"page-number": "1"
},
"product": []
}
]
}
}
现在json['cj-api']['products'][0]['product']
将起作用