0

我有一个如下所示的 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:为了进一步澄清,我JSON.stringify(result)在将一些 XML 放入XML2js之后运行得到了这个对象。

4

5 回答 5

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'
于 2013-08-15T07:42:43.640 回答
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="a", b="b", c="c"}]

于 2013-08-15T07:35:34.337 回答
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, 这是唯一的方法。

于 2013-08-15T07:41:40.057 回答
0

由于您的问题缺少最后一个

}
        ]
    }
}

和这里的其他人更改了您的示例并使其正常工作,您是否尝试纠正它?

如果不是,那么我建议您或数据提供者更正回复的结构。

于 2013-08-15T08:18:25.083 回答
-2

我试过下面的json结构

var json={
    "cj-api": {
        "products": [
            {
                "$": {
                    "total-matched": "231746",
                    "records-returned": "999",
                    "page-number": "1"
                },
                "product": []
            }
        ]
    }
}

现在json['cj-api']['products'][0]['product']可以工作了

于 2013-08-15T07:31:01.053 回答