如何移除损坏嵌套JSON值中包裹嵌套结构的多余双引号?
修复嵌套JSON字段被多余双引号包裹的问题
问题表现
损坏的JSON中origin字段存储的数组被外层额外双引号包裹,整体成为字符串值,无法被JSON解析器识别为嵌套数组结构:
损坏的JSON片段:
{ "type" : "fruitList", "data" : [{ "fruitName" : "test", "origin" : "[{"states" : "USA"}]" }] }
需要修复为标准嵌套结构:
{ "type" : "fruitList", "data" : [{ "fruitName" : "test", "origin" : [{"states" : "USA"}] }] }
实现方法
使用精准匹配字段的正则做替换即可,不需要改动其他正常字段的内容,以JavaScript环境为例,代码如下:
// 待修复的损坏JSON字符串 const brokenStr = `{ "type" : "fruitList", "data" : [{ "fruitName" : "test", "origin" : "[{"states" : "USA"}]" }] }` // 正则替换移除origin字段值外层多余的双引号 const fixedStr = brokenStr.replace(/"origin"\s*:\s*"(\[[\s\S]*?\])"/g, '"origin": $1') // 验证解析结果 const validJson = JSON.parse(fixedStr)
替换后可以直接通过JSON.parse正常解析,validJson.data[0].origin会直接返回标准数组类型[{"states": "USA"}]。
正则规则说明
"origin"\s*:\s*":精准匹配origin字段名、冒号、字段值前的多余开头双引号,\s*兼容键值之间任意数量的空格,适配不同排版的JSON(\[[\s\S]*?\]):捕获组,非贪婪匹配从[开始到对应]结束的完整数组内容,支持数组内嵌套多个对象、多个字段的场景,不会跨字段误匹配- 末尾的
":匹配数组闭合方括号后的多余结尾双引号 g修饰符:支持批量修复整个JSON中所有同类型错误,不管数据列表里有多少条记录带该问题都能一次性处理
兼容扩展
如果数组内容中存在转义双引号、中文、特殊字符,上面的正则依然可以正常匹配;如果还有其他字段存在同类「数组/对象被引号包裹成字符串」的问题,只需要把正则里的origin替换成对应字段名即可。
内容的提问来源于stack exchange,提问作者ssDev
相关产品推荐
相关产品推荐

