2

我正在测试一些代码,并创建了一个包含数据的 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

4 回答 4

6

请尝试这样:

$.getJSON("appData.json", function(results) {
        $.each(results, function(index) {
            alert(results[index].foo);
        });
    });
于 2012-08-11T20:18:08.577 回答
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 中的一种迭代方法。

于 2012-08-11T20:16:12.257 回答
1

当警告一个对象时,它会说[Object],,如果使用 Firefox,你总是可以这样做alert(results.toSource());,但更好的选择是开始使用控制台 (F12):

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

你可以看到整个物体及其结构。

于 2012-08-11T20:17:59.340 回答
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] );
}
}
于 2012-08-11T20:25:19.490 回答