【问题标题】:JavaScript eval() JSON issueJavaScript eval() JSON 问题
【发布时间】:2011-04-12 02:23:24
【问题描述】:

我有下面的 JSON 字符串:

{ "name":"Ruby on Rails 棒球 球衣”,“价格”:“19.99”,
"id":"1025786064",
"图片":"http://127.0.0.1:3001/assets/products/4/product/ror_baseball.jpeg" }, { "name":"Ruby on Rails 棒球 球衣”,“价格”:“19.99”,
"id":"1025786064",
"图片":"http://127.0.0.1:3001/assets/products/5/product/ror_baseball_back.jpeg" }, { "name":"Ruby on Rails 铃声 T 恤", "价格":"19.99",
"id":"187438981",
"图片":"http://127.0.0.1:3001/assets/products/9/product/ror_ringer.jpeg" }, { "name":"Ruby on Rails 铃声 T 恤", "价格":"19.99",
"id":"187438981",
"图片":"http://127.0.0.1:3001/assets/products/10/product/ror_ringer_back.jpeg" }, { "name":"阿帕奇棒球 球衣”,“价格”:“19.99”,
"id":"706676762",
"图片":"http://127.0.0.1:3001/assets/products/1004/product/apache_baseball.png" }, { "name":"Ruby Baseball Jersey", “价格”:“19.99”,“id”:“569012001”, "图片":"http://127.0.0.1:3001/assets/products/1008/product/ruby_baseball.png" }

然后在 jQuery 中:

var d = eval("(" + data + ")"); //data is the json string above.

$.each(d, function(idx, item) {
 alert(item);      
});

没有错误,但它只显示第一个序列的数据。如何循环遍历所有数据?

谢谢。

【问题讨论】:

    标签: javascript jquery json iteration eval


    【解决方案1】:

    首先,确保您从这里使用 JSON 解析器:https://github.com/douglascrockford/JSON-js/blob/master/json2.js

    那么您的代码将如下所示:

    var myArrayOfObjects = JSON.parse("[" + data + "]");
    for (obj in myArrayOfObjects)
    {
       alert("Name:" + myArrayOfObjects[obj].name);
    }
    

    或在 Jquery 中:

    $.each(myArrayOfObjects , function(i, o) {
     alert("Name:" + o.name);      
    });
    

    【讨论】:

    • 你是对的!我应该使用“[”+数据+“]”而不是“(”+数据+“)”。
    【解决方案2】:

    使用eval() 解析 JSON 是不安全的。尝试使用浏览器原生(不需要库!)函数JSON.parse(),它在所有浏览器中实现并且是安全的。

    【讨论】:

    • 它并非在所有浏览器中都实现。它甚至没有在 IE 8 中实现。
    • 你错了。 EcmaScript 3.1 中添加了原生 JSON 支持。因此 IE6 和 IE7 以及旧版本的 Firefox 不支持它。
    【解决方案3】:

    Crockford 建议不要使用 eval 来解析 JSON,因此您应该使用 JSON.parse 函数。

    你可以在这里使用它:

    http://www.json.org/js.html

    【讨论】:

      【解决方案4】:

      试试:

      var d = eval("[" + data + "]");
      

      JSON 数组用方括号括起来,例如:'[ 1,2,3 ]'

      (是的,不要使用eval,而是使用JSON 内置对象或类似的更安全的解决方案)

      【讨论】:

      • 这将返回一个包含一个成员的数组,即 JSON 内容。为了避免这种情况,我们使用普通的旧括号,它不会添加任何类型的包装,而只是防止语法错误。
      • @Delan - 不,看看 OP 的示例字符串,它是一个逗号分隔的列表。
      【解决方案5】:

      尝试用 [ ] 包装你的 JSON

      您可以在此处验证您的 JSON:JSONLint Validator 以了解问题所在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        相关资源
        最近更新 更多