无法从json对象检索特定值

时间:2014-05-02 12:25:37

标签: javascript json

这一直困扰着我至少2个小时。基本上,我有这个json对象,示例值是:

{
    "events": [
        {
            "id": 64714,
            "live": false,
            "start": "1399117500",
            "league_code": "SOCENGPRE",
            "home_id": "30866",
            "away_id": "30860",
            "home_name": "West Ham",
            "away_name": "Tottenham",
            "odds": {
                "3W": {
                    "home": "4.15",
                    "away": "1.88",
                    "draw": "3.60"
                }
            },
        },
        {
            "id": 64712,
            "live": false,
            "start": "1399125600",
            "league_code": "SOCENGPRE",
            "home_id": "30792",
            "away_id": "30856",
            "home_name": "Stoke",
            "away_name": "Fulham",
            "odds": {
                "3W": {
                    "home": "2.32",
                    "away": "3.10",
                    "draw": "3.35"
                }
            },
        },...

这行代码:

prettyprintJSON(oddsData.events[0].odds);

指的是:

function prettyprintJSON (jsondata) {
    // prints a human readable form of JSON
    pretty = JSON.stringify(jsondata, null, 4);
    $("#resultsbox").html("<pre>"+pretty+"</pre>")
}

打印出来:

{
    "3W": {
        "home": "4.15",
        "away": "1.88",
        "draw": "3.60"
    }
}

但现在我被卡住了。我想要检索主页/客场/抽奖值,但我不能。我认为我必须使用oddsData.events[0].odds.3W,但这不起作用,oddsData.events[0].odds.home打印出未定义的内容。我被卡住了。有什么想法吗?

5 个答案:

答案 0 :(得分:1)

您可以在javascript对象上使用数组语法。这看起来像oddsData.events[0].odds["3W"]

答案 1 :(得分:1)

3W不是有效的标识符,因为它以数字开头,因此您无法使用点表示法访问它。您将能够使用以下方法访问该对象:

oddsData.events[0].odds['3W']

有效标识必须以unicode字母$\_开头。有关详细信息,请参阅http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

答案 2 :(得分:0)

你应该使用

oddsData.events[0].odds["3W"].home

您可以像oddsData.events[0].odds.3W.home那样编写它,但3W不是有效的属性名称(名称不能以数字开头)因此它放在方括号中

另外,要了解完整的命名规则,请在MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Values,_variables,_and_literals

上阅读

答案 3 :(得分:0)

可以使用[]语法访问它。不能使用.语法访问以数字开头的属性名称。

oddsData.events[0].odds['3W'].home

答案 4 :(得分:0)

经验法则是使用[]语法访问对象或数组键,如果这些键不满足变量命名规则或匹配保留的javascript关键字,例如&#34; var&#34;,&#34;每个& #34;,&#34;长度&#34;等

即使javascript不会破坏它,它仍然会产生逻辑或运行时错误。