我正在测试一些代码,并且我已经用数据创建了一个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文件都在我的桌面上,我从那里运行它。
答案 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] );
}
}