如何使用JSON.parse将包含JSON对象的字符串数组转换为真实数组
问题原因
- 你的代码存在两处核心错误导致无法正常运行:
- 标准JSON规范要求键名和字符串类型的值必须使用双引号包裹,你原字符串里使用的是单引号,不符合JSON.parse的语法要求,会直接抛出解析错误。
- 你定义的
test变量本身已经是包裹了[]的数组格式字符串,你又额外拼接了一层[],就算解析成功也会得到二维数组,和你需要的结果不符。
可行解决方法
方法1:替换单引号为双引号后解析(推荐,无安全风险)
先把字符串里的单引号全部替换为符合JSON规范的双引号,再调用JSON.parse即可:
var test = "[{'test1':1,'test2':2},{'test1':1,'test2':2}]"; // 替换单引号为双引号,旧环境不支持replaceAll可换成正则写法 test.replace(/'/g, '"') var formattedStr = test.replaceAll("'", '"'); // 直接解析即可,不需要额外加[] var array = JSON.parse(formattedStr);
运行后array就是你需要的数组对象,完全符合需求。
方法2:使用eval解析(仅适用于你完全确认字符串来源安全的场景)
如果不想做字符串替换,且能确保这段字符串不会有恶意注入风险,可以直接用eval解析:
var test = "[{'test1':1,'test2':2},{'test1':1,'test2':2}]"; var array = eval('(' + test + ')');
注意:eval会执行字符串里的所有代码,如果字符串来源不可控,会存在XSS安全风险,非必要不推荐使用该方法。
内容的提问来源于stack exchange,提问作者Rob98
相关产品推荐
相关产品推荐

