JavaScript eval()JSON问题

时间:2010-09-14 10:20:45

标签: javascript jquery json iteration eval

我有以下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 Ringer   T恤“,”价格“:”19.99“,
  “ID”: “187438981”,
  “图像”: “http://127.0.0.1:3001/assets/products/9/product/ror_ringer.jpeg”   },{“name”:“Ruby on Rails Ringer   T恤“,”价格“:”19.99“,
  “ID”: “187438981”,
  “图像”: “http://127.0.0.1:3001/assets/products/10/product/ror_ringer_back.jpeg”   },{“name”:“Apache Baseball   泽西岛“,”价格“:”19.99“,
  “ID”: “706676762”,
  “图像”: “http://127.0.0.1:3001/assets/products/1004/product/apache_baseball.png”   },{“name”:“Ruby Baseball Jersey”,   “price”:“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);      
});

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

谢谢。

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Crockford建议不要使用eval来解析JSON,所以你应该使用JSON.parse函数。

您可以在这里使用它:

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

答案 2 :(得分:1)

尝试:

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

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

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

答案 3 :(得分:1)

尝试使用[]

包装JSON

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

答案 4 :(得分: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);      
});