getJSON只返回[object Object],[object Object]

时间:2012-08-11 20:11:55

标签: javascript jquery json

我正在测试一些代码,并且我已经用数据创建了一个json文件。

问题是我在警报中得到“[object Object],[object Object]”。没有数据。

我做错了什么?

以下是代码:

<!DOCTYPE HTML>
<html>
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

<script>

    $(document).ready(function() {
        $.getJSON("appData.json",function(results){alert(results);});
    });

</script>

</head>
<body>

</body>
</html>

这是appData.json的内容

[{"foo":"bar"},{"foo2":"blablabla"}]

此外,index.html文件和json文件都在我的桌面上,我从那里运行它。

4 个答案:

答案 0 :(得分:5)

请尝试这样:

$.getJSON("appData.json", function(results) {
        $.each(results, function(index) {
            alert(results[index].foo);
        });
    });

答案 1 :(得分:1)

嗯,你得到一个对象数组,数组和对象就是数据。

  //          v----first Object in the outer Array
alert(results[0].foo);
  //              ^----foo property of the first Object

只是alert显示对象的默认toString()值。

当您使用$.getJSON时,jQuery会自动将JSON文本解析为JavaScript对象。如果您想要原始JSON,请改为发出$.get请求。


如果要迭代Array,请使用for循环或jQuery或本机API中的一种迭代方法。

答案 2 :(得分:1)

当提醒对象时,它会说[Object],如果使用Firefox,你总是可以做alert(results.toSource());,但更好的选择是开始使用控制台(F12):< / p>

$(document).ready(function() {
    $.getJSON("appData.json",function(results){
       console.log(results);
    });
});

你可以看到整个对象及其结构。

答案 3 :(得分:1)

那里没有问题。那是让你知道数组中有两个对象。你得到这个的原因是因为它是顶级的,所以你只能得到类型。访问JSON数据的好方法是通过递归。

function ContainsKeyValue( obj, key, value ){
for( all in obj )
{
    if( obj[all] != null && obj[all][key] == value ){
        return true;
    }
    if( typeof obj[all] == "object" && obj[all]!= null ){
        var found = ContainsKeyValue( obj[all], key, value );
        if( found == true ) return true;
    }
}
return false;
}

这将从图中的给定对象开始,然后递减找到的任何对象。我这样用它:

var liveData = [];
for( var item in json.Items)
{
if( ContainsKeyValue( json.Items[item], "Key", "Value" ) === true )
{
    liveData.push( json.Items[item] );
}
}