You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript中替换JSON嵌套双引号为单引号的解决方法

解决JSON嵌套双引号导致解析失败的问题

哈哈,这个坑我踩过!JSON解析器对引号的规则特别严格,你这里的问题是userAgent字段值里的嵌套双引号(比如sAgkey::"")让解析器误以为字符串提前结束了,直接报错。咱们可以用正则表达式精准替换掉这些内部的双引号,同时保留JSON结构本身的双引号。

方法一:通用替换(处理所有字符串字段内的双引号)

这个方法会遍历JSON里所有双引号包裹的字段值,把值内部的双引号全部替换成单引号,不会破坏JSON的整体结构:

// 先修正原始字符串里的语法错误(比如多余的""userAgent改成"userAgent")
const faultyJson = '{"hexId":"123","version":5,"userAgent":"Mozilla/5.02.1.0 (Linux; U; Android 7.0; SM-G935S Build/NRD90M)|||sDid::ba83f40b-22e0-3992-a4d4-15b5d554790c|sAgkey::""|sAppkey::""|null|null|svcode::1221|sgIdKey::1631f8d9-3c1c-4020-a322-53f266ec9547","referer":"http://www.google.com.ar"}';

// 正则匹配所有JSON字符串字段,替换内部双引号为单引号
const fixedJson = faultyJson.replace(/"([^"\\]*(?:\\.[^"\\]*)*)"/g, (match, content) => {
  const replacedContent = content.replace(/"/g, "'");
  return `"${replacedContent}"`;
});

// 现在可以正常解析了
const parsedData = JSON.parse(fixedJson);
console.log(parsedData.userAgent);
// 输出:Mozilla/5.02.1.0 (Linux; U; Android 7.0; SM-G935S Build/NRD90M)|||sDid::ba83f40b-22e0-3992-a4d4-15b5d554790c|sAgkey::''|sAppkey::''|null|null|svcode::1221|sgIdKey::1631f8d9-3c1c-4020-a322-53f266ec9547

方法二:精准替换(只处理特定的嵌套双引号)

如果你确定只有sAgkey::""sAppkey::""这类格式的嵌套双引号,可以用更针对性的正则,避免误替换其他可能的双引号:

const fixedJson = faultyJson.replace(/(sAgkey::|sAppkey::)""\|/g, '$1\'\'|');

小提醒

如果能从生成JSON的源头解决问题(比如把内部双引号转义成\")是最优解,但如果只能处理现有字符串,上面的方法就能完美解决你的问题。

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

火山引擎 最新活动