You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 18:05:07