在javascript中解析对象内的JSON对象

时间:2013-08-15 07:18:46

标签: javascript json

我有一个看起来像这样的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)来获得此对象。

5 个答案:

答案 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']将起作用