【问题标题】:Accessing JSON values with a variable使用变量访问 JSON 值
【发布时间】:2010-10-28 22:09:46
【问题描述】:

我正在尝试使用 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);
}
}

但它一直返回未定义。知道我做错了什么吗?我已经检查以确保要访问 attrib 的 var 是 0107001,那里没有问题。

另外,我知道我的 JSON 文件是一个 php 文件,因此我可以过滤返回的内容以匹配属性值,但我正在寻找可以在 HTML 和 JS 上运行的东西,所以我可以打包 JSON为项目归档并随身携带。不需要带有 PHP 等的 Web 服务器。

【问题讨论】:

  • 当您查看 Firebug 或 IE 调试器中的“data”变量时,它包含什么

标签: javascript jquery json


【解决方案1】:

数据访问本身对我有用:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 另外,如果对象不是太复杂,请尝试将其转换为字符串并使用警报或提示来显示它,这样您就可以准确地看到它是什么。我通常使用 JSON.stringify 来做到这一点 (json.org/js.html)。
    【解决方案3】:

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

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

    这不是你的解决方案,但通过它你可以知道你的数据是如何来的。

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多