将对象字符串转换为 JSON

2022-08-30 02:09:13

如何使用JavaScript(或jQuery)将描述对象的字符串转换为JSON字符串?

例如:转换此(不是有效的 JSON 字符串):

var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"

进入这个:

str = '{ "hello": "world", "places": ["Africa", "America", "Asia", "Australia"] }'

如果可能的话,我很乐意避免使用。eval()


答案 1

如果字符串来自受信任的源,则可以使用结果。喜欢这个:evalJSON.stringify

var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }";
var json = JSON.stringify(eval("(" + str + ")"));

请注意,当对象文本时,它必须用括号括起来,否则大括号被分析为块而不是对象。eval

我也同意问题下的评论,即最好从有效的JSON中对对象进行编码,并避免必须解析,编码,然后可能再次解析它。HTML支持单引号属性(只需确保对字符串内的任何单引号进行HTML编码)。


答案 2

您的字符串不是有效的 JSON,因此(或 jQuery 的 )将不起作用。JSON.parse$.parseJSON

一种方法是使用“解析”“无效”JSON,然后将其“转换”为有效的JSON。evalstringify

var str = "{ hello: 'world', places: ['Africa', 'America', 'Asia', 'Australia'] }"
str = JSON.stringify(eval('('+str+')'));

我建议不要试图“修复”无效的JSON,而是首先从有效的JSON开始。如何生成,它应该在那里修复,在生成之前,而不是之后。str

编辑:你说(在评论中)这个字符串存储在数据属性中:

<div data-object="{hello:'world'}"></div>

我建议你在这里修复它,所以它可以是d。首先,它们都需要用双引号括起来。它应该看起来像(HTML中的单引号属性是有效的):JSON.parse

<div data-object='{"hello":"world"}'></div>

现在,你可以使用(或jQuery的)。JSON.parse$.parseJSON

var str = '{"hello":"world"}';
var obj = JSON.parse(str);