我有一个JSON,如下所示
var json = [
{
"toppings": []
},
{
"crustings": [
{
"crust_name": "kool crust ttttt"
},
{
"crust_name": "vcxvxvx"
}
]
}
];
我试图以这种方式阅读每种浇头和面包屑的名称
当我尝试这种方式时,我正在
未捕获的TypeError:无法读取属性'长度'在浏览器控制台中未定义。
for(var i=0;i<json.length;i++)
{
var topp = json[i].toppings;
var crust = json[i].crustings;
alert(crust.length);
}
请您告诉我如何阅读内部数组数据?
答案 0 :(得分:2)
由于您的JSON结构,此处的循环会适得其反。 toppings
属于json[0]
,crustings
位于json[1]
。
var topp = json[0].toppings;
var crust = json[1].crustings;
alert(crust.length);
要获得代码所暗示的行为(这将是一个更好的模式),您需要在父级中的单个对象中包含这两个属性:
var json = [{
"toppings": [],
"crustings": [
{ "crust_name": "kool crust ttttt" },
{ "crust_name": "vcxvxvx" }
]
}];
答案 1 :(得分:0)
问题是,你的第一个项目包含“浇头”但没有“结壳”;你的第二个项目包含“crustings”但不包含“toppings”。因此,每当您尝试访问一个不存在的元素时,它都会崩溃您的代码。你应该总是定义“浇头”和“结痂”,即使它们是空的。
var json = [
{
"toppings": [],
"crustings": []
},
{
"toppings": [],
"crustings": [
{
"crust_name": "kool crust ttttt"
},
{
"crust_name": "vcxvxvx"
}
]
}
];
答案 2 :(得分:0)
var arrTopping = json[0].toppings;
var arrCrusting = [];
var arrCrustingsTemp = json[1].crustings;
arrCrustingsTemp.forEach(function(i){
arrCrusting.push(i.crust_name);
});
现在arrTopping
包含浇头而arrCrusting
包含结痂。