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
相关产品推荐
相关产品推荐

