使用变量访问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); } } 

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

此外,我知道我的JSON文件是一个php文件,所以我可以过滤返回的内容以匹配attrib值,但我正在寻找开发纯粹基于HTML和JS运行的东西,所以我可以只为其打包JSON文件投射并随身携带。 不需要带有PHP等的Web服务器

数据访问本身对我有用:

 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 ");" } 

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

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

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

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