如何读取JSON的内部数组数据?

时间:2015-02-19 11:10:19

标签: jquery json

我有一个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);

}

请您告诉我如何阅读内部数组数据?

3 个答案:

答案 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包含结痂。