如何在JavaScript中将含复杂结构的字符串转换为数组?
解决方案:将非标准JS对象字面量字符串转换为数组
你的字符串属于JavaScript对象字面量格式,而非标准JSON,因此JSON.parse()无法解析(JSON要求键必须用双引号,且不支持函数定义)。以下是几种可行方案:
方法1:使用eval()(简单直接,注意安全)
因为你的字符串是合法的JS代码,eval()可以直接解析它:
// 假设data是你提取的目标字符串 let array = eval(data);
注意:仅当你能100%确保字符串来源安全时使用,避免恶意代码注入风险。
方法2:使用Function构造函数(比eval更可控)
通过构造匿名函数返回目标数组,还能传入所需的外部变量(比如示例中的idCaller):
// 基础用法 let array = new Function('return ' + data)(); // 如需给函数传入外部变量(如idCaller) let idCaller = "searchBtn"; let array = new Function('idCaller', 'return ' + data)(idCaller);
这种方式和eval本质类似,但可以明确指定参数,作用域更清晰。
方法3:手动转换为合法JSON(仅适用于不需要保留函数的场景)
如果不需要保留onClick这类函数逻辑,可以把字符串转成标准JSON后解析:
let jsonStr = data // 给所有键名添加双引号 .replace(/(\w+):/g, '"$1":') // 把函数替换为null(或直接删除) .replace(/function\s*\([^)]*\)\s*{[^}]*}/g, 'null'); let array = JSON.parse(jsonStr);
缺点是会丢失函数的执行逻辑,只适合不需要交互行为的场景。
关键提醒
如果字符串来自不可信的外部来源,绝对不能使用eval或Function,建议要求数据源提供标准JSON格式(若需保留函数逻辑,可将函数体字符串化存储,之后再用new Function还原)。
内容的提问来源于stack exchange,提问作者BennyB
相关产品推荐
相关产品推荐

