JSON对象访问器返回undefined

时间:2011-07-12 03:01:38

标签: javascript jquery json

我正在通过jQuery使用一些JSON,并认为我正确地做到了,但我一直都未定义。

如果我的JSON组织如下:

{ "item1" : "answer",
  "name" : "something",
  "title" : "your title",
  "favorites" : [ { 
      "color" : "blue",
      "season" : "winter",
      "sport" : "baseball"
      },
      { ... more favorite objects ... }]
}

然后我用

来调用它
$.getJSON(urlOfMyJSON, null, function(json){
    $("p").append(json.item1); // returns 'answer'
    $("h3").append(json.favorites); // returns undefined
    $("h4").append(json.favorites[0].color); // thought this should work; throws an error because undefined has no "color".
});

任何人都可以指出我正确的方向吗?我知道我想做什么,我只是不太确定我错过了什么。

谢谢!

2 个答案:

答案 0 :(得分:1)

这样做可以看到问题:

$.getJSON(urlOfMyJSON, null, function(json){
   alert(json.toSource());
});

答案 1 :(得分:1)

您的JSON或访问生成的反序列化对象属性的代码没有任何问题。 Live example.但是,这一行:

$("h3").append(json.favorites);

没有多大意义。你要求jQuery采用这个数组:

[
    { 
        "color" : "blue",
        "season" : "winter",
        "sport" : "baseball"
    }
]

...并将其附加到您网页上的所有h3元素。 jQuery将使用toString,因为它不是DOM元素或jQuery实例,toString可能会返回[object Object]或类似。

下一行$("h4").append(json.favorites[0].color);应该可以正常工作,正如上面的实时链接所示。如果页面上有h4个元素供其更新!