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

JavaScript中提取字符串数据并转为目标格式数组求助

嘿,我来帮你搞定这个需求!首先得提个关键点:你给出的原始字符串存在JSON语法错误,这也是你用splice和split没搞定的核心原因之一,先把这个问题解决,后面就顺理成章了。

第一步:修正原始字符串的语法问题

你的原始字符串有两个明显的语法错误:

  • 每个对象之间没有用逗号分隔(比如}{这种格式是不合法的)
  • 键名的引号重复了(比如""list""应该是"list")

如果能手动修正,修正后的合法JSON字符串是这样的:

[{"list":"Gross Motor Skills","value":"8"},{"list":"Sorting","value":"8"},{"list":"Grouping","value":"8"},{"list":"Drawing","value":"8"},{"list":"Observations","value":"6"},{"list":"Writing","value":"7"}]

要是没办法手动改,也可以用正则表达式自动修复,代码后面会提到。

第二步:用JavaScript转换为目标数组

接下来就简单了,我们可以用JSON解析+数组映射的方式快速得到结果:

方法1:基于修正后的合法字符串

// 修正后的原始字符串
const rawValidStr = '[{"list":"Gross Motor Skills","value":"8"},{"list":"Sorting","value":"8"},{"list":"Grouping","value":"8"},{"list":"Drawing","value":"8"},{"list":"Observations","value":"6"},{"list":"Writing","value":"7"}]';

// 解析成对象数组,再映射成目标格式
const targetArray = JSON.parse(rawValidStr).map(item => `${item.list} ${item.value}`);

console.log(targetArray);
// 输出结果:["Gross Motor Skills 8", "Sorting 8", "Grouping 8", "Drawing 8", "Observations 6", "Writing 7"]

方法2:自动修复错误字符串再转换

如果原始字符串没办法手动修正,用正则先修复语法问题再处理:

const rawBrokenStr = '[{"list":"Gross Motor Skills""value":"8"}{""list":"Sorting""value":"8"} {""list":"Grouping""value":"8"}{""list":"Drawing""value":"8"} {""list":"Observations""value":"6"}{""list":"Writing""value":"7"}]';

// 正则修复语法错误:添加对象分隔逗号、修正重复引号
const fixedStr = rawBrokenStr
  .replace(/}{/g, '},{')
  .replace(/""/g, '"')
  .replace(/} {/g, '}, {');

// 后续步骤和方法1一致
const targetArray = JSON.parse(fixedStr).map(item => `${item.list} ${item.value}`);

console.log(targetArray);
// 同样得到目标数组

为什么splice和split没达到预期?

splice是用来修改数组内容的方法(比如删除、插入元素),split只是把字符串按指定分隔符切成数组,这两个方法都没办法识别JSON的键值对结构,所以单独用它们处理这种结构化数据会非常麻烦,甚至无法得到正确结果。正确的思路应该是先把字符串解析成结构化的对象数组,再做格式化处理。

内容的提问来源于stack exchange,提问作者Aniket

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:12:34