3 回答

TA贡献1833条经验 获得超4个赞
如果字符串是来自可靠来源,你可以使用eval然后JSON.stringify的结果。像这样:
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
var json = JSON.stringify(eval("(" + str + ")"));
请注意,当您eval使用对象文字时,必须将其括在括号中,否则将大括号解析为块而不是对象。
我也同意这个问题下的评论,即在开始时用有效的JSON编码对象会更好,并且避免必须解析,编码,然后可能再次解析它。HTML支持单引号属性(只需确保对字符串中的任何单引号进行HTML编码)。

TA贡献1856条经验 获得超17个赞
你的字符串是无效的JSON,所以JSON.parse(或jQuery的$.parseJSON)将无法正常工作。
一种方法是使用eval“解析”“无效”JSON,然后stringify将其“转换”为有效的JSON。
var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"
str = JSON.stringify(eval('('+str+')'));
我建议您不要试图“修复”无效的JSON,而是先从有效的JSON开始。如何str生成,它应该在生成之前修复,而不是之后。
编辑:您说(在评论中)此字符串存储在数据属性中:
<div data-object="{hello:'world'}"></div>
我建议你在这里解决它,所以它可以只是JSON.parsed。首先,它们的键和值都需要用双引号引用。它应该看起来像(HTML中的单引号属性是有效的):
<div data-object='{"hello":"world"}'></div>
现在,您可以使用JSON.parse(或jQuery $.parseJSON)。
var str = '{"hello":"world"}';
var obj = JSON.parse(str);
添加回答
举报