JavaScript中如何将对象数组的字符串表示转换为对象数组?
转换实现方案
你需要处理的核心问题有两个:
- 原始字符串使用单引号包裹键名、属性值,不符合标准JSON的双引号语法要求,无法直接通过
JSON.parse解析为JS对象 - 解析完成后需要移除每个对象中多余的
key3字段,匹配目标输出格式
方法1:原生安全实现(生产环境推荐)
无第三方依赖、无代码注入风险,适合所有正式场景使用:
// 原始待转换字符串 const originStr = "[{'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}, {'key1': 'val1', 'key2': 'val2'}]"; // 第一步:将字符串内单引号统一替换为双引号,生成符合规范的JSON字符串 const standardJsonStr = originStr.replace(/'/g, '"'); // 第二步:解析为可操作的JS数组 const parsedArr = JSON.parse(standardJsonStr); // 第三步:遍历数组移除key3字段,得到最终结果 // 写法1:解构赋值,不修改原解析对象(推荐) const result = parsedArr.map(({ key3, ...restProps }) => restProps); // 写法2:如果不需要保留原解析对象,也可以直接用delete删除属性 // const result = parsedArr.map(item => { // delete item.key3 // return item // }) console.log(result) // 输出结果:[ { key1: 'val1', key2: 'val2' }, { key1: 'val1', key2: 'val2' } ]
注意:如果你的属性值中本身包含单引号字符,替换前需要先对值内的单引号做转义处理,避免破坏JSON结构
方法2:快速调试实现(仅本地使用)
如果只是本地调试处理固定字符串,可以用eval直接执行字符串表达式得到数组,代码更简洁,但存在代码注入风险,绝对禁止在生产环境处理非可信来源的字符串时使用:
const originStr = "[{'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}, {'key1': 'val1', 'key2': 'val2'}]"; // 直接执行字符串表达式得到数组 const parsedArr = eval(`(${originStr})`); // 后续过滤key3的逻辑和方法1一致 const result = parsedArr.map(({ key3, ...restProps }) => restProps);
内容的提问来源于stack exchange,提问作者Marcio G
相关产品推荐
相关产品推荐

