你的字符串不是有效的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.parse
解析。 首先,键和值都需要用双引号括起来。 它应该看起来像这样(在HTML中使用单引号属性是有效的):
<div data-object='{"hello":"world"}'></div>
现在,您可以直接使用JSON.parse
(或jQuery的 $.parseJSON
)。
var str = '{"hello":"world"}';
var obj = JSON.parse(str);
data
属性中,例如:<div data-object="{hello:'world'}"></div>
,但我不想在 HTML 中使用单引号(因此可能不太可靠)。 - snorpey<div data-object='{"hello":"world"}'></div>
是100%有效的HTML(单引号与信任有什么关系?)。如果您以这种方式做,您只需使用JSON.parse
就可以正常工作。注意:键也需要加引号。 - gen_Eric<div data-object="{\"hello\":\"world\"}"></div>
。如果你不想在属性中使用有效的JSON,则必须自己制定格式并解析它。 - gen_Eric