使用JSON解析而不是eval

时间:2011-08-30 15:13:55

标签: javascript json

我有这个字符串,我在JAVA中生成并传递给javascript进行解析。

这有效:

var childString = '[{title: "Item 1"},{title: "Folder 2", isFolder: true,children: [{title: "Sub-item 2.1"},{title: "Sub-item 2.2"}]},{title: "Item 3"}]';
var childArray = eval(childString);

但我到处都读过eval == evil所以我正在研究JSON的解析方式。 我尝试使用JSON.parse(childString),但我收到了错误。

我怎么能以JSON的方式做到这一点?

谢谢!

7 个答案:

答案 0 :(得分:7)

您的数据是有效的JavaScript(这就是eval有效的原因),但它不是有效的JSON。例如,您需要用引号括住属性的名称。

E.g。

'[{"title": "Item 1"} ...

您可以找到JSON规范here

答案 1 :(得分:3)

您可能需要自己定义JSON对象,具体取决于您的浏览器。您可以从https://github.com/douglascrockford/JSON-js下载代码。

答案 2 :(得分:3)

您的JSON格式不正确。您需要在上使用双引号。

'{"foo":"bar"}'

答案 3 :(得分:3)

您无法使用JSON.parse解析它,因为您的json字符串无效。它需要如下:

var childString = '[{"title": "Item 1"},{"title": "Folder 2", "isFolder": true,"children": [{"title": "Sub-item 2.1"},{"title": "Sub-item 2.2"}]},{"title": "Item 3"}]';

See here.

答案 4 :(得分:1)

使用script标记在HTML输出中加入JSON2,然后您可以使用JSON.parse

答案 5 :(得分:1)

好的,jsFiddle

var childArray = JSON.parse(childString.replace(/([{, ])([a-zA-Z0-9]+):/g, '$1"$2":'));

会起作用,但我可能仍会尝试获取有效的JSON。

答案 6 :(得分:1)

注意:双引号是必不可少的。 这不会起作用:

var childString = "[{'title': 'Item 1'},{'title': 'Folder 2', 'isFolder': true,'children': [{'title': 'Sub-item 2.1'},{'title': 'Sub-item 2.2'}]},{'title': 'Item 3'}]";