【问题标题】:New to JSON, what can I do with this json responseJSON 新手,我能用这个 json 响应做什么
【发布时间】:2009-02-04 19:21:20
【问题描述】:

网站返回以下 JSON 响应,我将如何使用它(在 javascript 中)?

[{"ID1":9996,"ID2":22}]

JSON 只是返回一个数组吗?

【问题讨论】:

  • 你用什么平台来消费它?这是网页上的 javascript 代码,还是其他类型的应用程序?

标签: javascript json


【解决方案1】:

我们使用:

function evalResponse(response) {
    var xyz123 = null;
    eval("xyz123 = " + response);
    return xyz123;
}

另一种方法是简单地使用:

var myObj = eval(response);

基本上,您必须在响应上调用eval() 才能创建一个javascript 对象。这是因为当您从 AJAX 调用中获取响应时,响应本身只是一个字符串。在你eval它之后,你就有了一个可以操作的对象。

function myCallback(response) {
    var myObj = evalResponse(response);
    alert(myObj.ID1);
}

您可以使用 javascript 库为您处理此问题。或者,您可以尝试自己解析字符串。 eval() 有它自己的问题,但它有效。

【讨论】:

  • 支持使用额外分配来阻止一些安全漏洞的技巧:如果它不可分配,则评估将失败。
  • 谢谢。它仍然可以解决,但对于恶意用户来说,这是一个额外的担忧。
  • 尽管已经解决了这个问题,但由于安全问题,eval() 方法并不是一件好事。有许多专用的 JSON 解析器,包括 json.org 上的规范解析器,并且 JSON 解析器也被集成到 Web 浏览器和即将推出的 ECMAScript 标准中。我更愿意看到使用 JSON 解析器而不是 eval()。
  • 是的。 JSON 解析器会更好。
【解决方案2】:

如果你使用http://www.JSON.org/json2.js,你可以使用它的方法 JSON.parse 来检索 json string 作为一个对象(不使用 eval(这被认为是邪恶的)),所以在这种情况下你会使用:

var nwObj = JSON.parse('[{"ID1":9996,"ID2":22}]');
alert(nwObj.ID1); //=> 9996

【讨论】:

  • 赞成;这是唯一真正建议使用 JSON 解析器库而不是不安全的 eval() 的答案。
【解决方案3】:

它看起来像一个数组,其中一个对象包含两个属性。我更希望看到像这样结构化的相同数据:

{"ID":[9996,22]}

然后你有一个对象包含一个包含两个元素的数组,这似乎更适合呈现的数据。然后使用 Endangered 的 evalResponse() 代码,您可以像这样使用它:

var responseObj = evalResponse(response);

// responseObj.ID[0] would be 9996, responseObj.ID[1] would be 22

【讨论】:

    【解决方案4】:

    我认为其他答案可能无法回答您的问题,也许您正在寻找一种使用“1 个对象的数组”的方法。也许这会有所帮助:

    var arr = [{"ID1":9996,"ID2":22}];
    var obj = arr[0];
    var id1 = obj.ID1;
    var id2 = obj.ID2;
    

    【讨论】:

      【解决方案5】:

      以下是您获取数据的方式:

      <script type="text/javascript" >
      var something = [{"ID1":9996,"ID2":22}]
      alert(something[0].ID1)
      </script>
      

      【讨论】:

      • 不包括响应。
      【解决方案6】:

      您发布的 JSON 表示一个包含一个对象的数组,该对象具有属性 ID1 和 ID2(初始化为冒号后的相应值)。

      要将字符串转换为 javascript 对象,请将其传递给 eval,如下所示:

      var obj = eval('[{"ID1":9996,"ID2":22}]');
      

      但是,如果您只有一个对象而不是数组,则此方法将失败,因此将其括在括号中会更安全:

      var obj = eval('(' + jsonResponse + ')');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-23
        • 1970-01-01
        • 2012-01-29
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多