使用变量访问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]); } }
这不是您的解决方案,但有了这个,您就可以了解数据的来源。