解析json问题:object.property未定义

时间:2012-07-24 12:51:22

标签: jquery json

这是ajax调用返回的json:

{
    "StumbleUpon": 0,
    "Reddit": 0,
    "Facebook": {
        "commentsbox_count": 0,
        "click_count": 0,
        "total_count": 0,
        "comment_count": 0,
        "like_count": 0,
        "share_count": 0
    },
    "Delicious": 0,
    "GooglePlusOne": 1,
    "Buzz": 0,
    "Twitter": 1,
    "Diggs": 0,
    "Pinterest": 0,
    "LinkedIn": 1
}

我正在尝试在jquery中处理它但由于某些原因我无法理解,Facebook.total_count是未定义的。我会期待,否则因为控制台告诉我上面的json被收到了。而且,所有其他人(data.Twitter等)都有效。这是我的回调函数,其中产生错误。我做错了什么?

function(data){

                console.log(data);
//this line throws the error
                var fb = data.Facebook;
                var total = parseInt(data.Twitter + parseInt(fb.total_count) + data.GooglePlusOne + data.Pinterest + data.LinkedIn);
// rest of code.
}

请参阅jsFiddle上的代码。

2 个答案:

答案 0 :(得分:5)

从根本上说,that code works - 前提是data已被反序列化。如果它还没有......

...将dataType: "JSON"添加到ajax来电:

$.ajax({
    // ...
    dataType: "JSON",
    // ...
});

...或对结果使用$.parseJSON

function(data) {
    if (typeof data === "string") {
        data = $.parseJSON(data);
    }
    // ...
}

注意:您不需要对这些数字使用parseInt,它们已经是JSON中的数字,并且会被正确反序列化。

答案 1 :(得分:0)

据我所知,您将JSON接收为字符串,但也未将其解析为实际对象。页面上有太多东西要真正筛选并准确地告诉你,但这似乎是个问题。试试jQuery.parseJSON