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

如何仅替换外层双引号,保留内层转义以生成合法JSON?

解决方案:仅转义JSON字符串值内的嵌套双引号

针对你遇到的JSON字符串中嵌套双引号未转义、全局替换会破坏结构的问题,可通过正则匹配+局部替换的方式精准处理值内的嵌套双引号,而非全局替换所有双引号。

核心思路

JSON结构中,双引号主要有两种作用:

  • 外层双引号:包裹键名或字符串值(属于JSON结构的边界符号)
  • 内层嵌套双引号:字符串值内部的内容,需要转义为\"才能保证JSON合法

我们需要精准识别字符串值内部的未转义双引号,仅对其进行转义处理。

通用正则方案(以JavaScript为例)

使用正则匹配JSON中的所有字符串片段(被"包裹的内容),再对每个片段内部的双引号单独转义:

const originalStr = '{"id":"apache "obsolete" version","instances":2}';
const processedStr = originalStr.replace(/"([^"\\]*(?:\\.[^"\\]*)*)"/g, (match, content) => {
  // 仅对字符串内容里的双引号转义
  return '"' + content.replace(/"/g, '\\"') + '"';
});
console.log(processedStr);

执行后输出:

{"id":"apache \"obsolete\" version","instances":2}

SQL场景方案(以PostgreSQL为例)

如果是在数据库中处理这类字符串,可使用regexp_replace结合正则分组实现:

SELECT regexp_replace(
  '{"id":"apache "obsolete" version","instances":2}',
  '(")([^"\\]*(?:\\.[^"\\]*)*)(")',
  '\1' || regexp_replace('\2', '"', '\\\\"', 'g') || '\3',
  'g'
);

该语句会匹配所有被"包裹的字符串片段,仅对片段内部的双引号进行转义,最终输出符合预期的JSON格式字符串。

注意事项

  • 若原始字符串中已有部分转义的双引号(如\"),上述正则会自动忽略已转义的内容,不会重复转义
  • 复杂JSON结构(如嵌套对象、数组)同样适用该方案,因为正则会匹配所有字符串值片段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:42:01