使用变量访问JSON值

时间:2010-10-28 13:50:17

标签: javascript jquery json

我正在尝试使用jQuery访问JSON数据,并根据变量获取一组特定的值。我在使用[]之前已经完成了这个,但由于某种原因,我无法弄清楚这次出了什么问题。

我的JSON文件(由getJSON读入,名为jsonmaker.php)如下所示:

{"0107001":{"label":"Canada","x":"0","y":"0.34"},"0107002":{"label":"USA","x":"-0.16","y":"0.53"}}

然后我有一个基本上是这样的函数:

function addAttrib(attrib) {
$.getJSON("jsonmaker.php", function(data) {
    alert(data[attrib].label);
}
}

但它一直未定义返回。知道我做错了什么吗?我已经检查过以确保var属于0107001,没有问题。

另外,我知道我的JSON文件是一个php文件,所以我可以过滤返回的内容以匹配attrib值,但我希望开发一些可以纯粹运行HTML和JS的东西,所以我可以打包JSON该项目的文件,并随身携带。不需要带有PHP等的Web服务器。

3 个答案:

答案 0 :(得分:2)

数据访问本身对我有用:

var data = {"0107001":{"label":"Canada","x":"0","y":"0.34"},"0107002":{"label":"USA","x":"-0.16","y":"0.53"}};
var attrib = "0107002";
alert(data[attrib].label); // USA

确保在调用addAttrib()和AJAX请求完成以及调用匿名回调函数之间保持attrib不变。

更新:这是您的真实代码吗?您至少有一个语法错误:

function addAttrib(attrib) {
    $.getJSON("jsonmaker.php", function(data) {
        alert(data[attrib].label);
    }); // <- Please note missing ");"
}

答案 1 :(得分:1)

根据我的经验,$.getJSON()并不总是返回一个对象。根据服务器返回的MIME类型以及JSON,您可能最终得到一个字符串而不是一个对象。检查data包含的内容。如果是字符串,则必须使用eval()(旧样式)或JSON.parse()(仅限新版浏览器)手动解析它。

答案 2 :(得分:0)

尝试列出数据中的所有属性,以确保返回数据:

for (var p in data){
  if (data.hasOwnProperty(p){
    alert(data[p]);
  }
}

这不是您的解决方案,但有了这个,您就可以了解数据的来源。