我有这个字符串,我在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的方式做到这一点?
谢谢!
答案 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"}]';
答案 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'}]";