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

JSON对象双引号转义问题:JSON.parse解析报错如何解决?

解决JSON解析时的Unexpected token错误

这个问题的核心是你的原始JSON格式不合法——project_name字段的值里的双引号没有正确转义,导致JSON解析器读到"Magic i-S6/"时就认为字符串结束了,后面的i-F1变成了无意义的语法,直接抛出Unexpected token i错误。

你之前用的str.replace(/"/g, '\\"')之所以没生效,是因为它把JSON里所有双引号都转义了(包括键名的合法引号),转义后的字符串会变成{\"id\":3,...},这显然也是无效的JSON,自然没法解析。

正确的解决思路

1. 从源头修复(最优方案)

如果可以的话,直接让生成这个JSON的服务/代码修正格式——把project_name里的双引号转义成\",正确的JSON应该是这样的:

{"id":3,"status_id":3,"project_class":"B","project_name":"Magic i-S6/\" i-F1"}

这是最稳妥的方式,避免后续手动修复带来的边缘问题。

2. 手动修复有问题的JSON字符串(如果无法修改源头)

如果你只能处理这个已经生成的错误字符串,需要只转义字符串内部的未转义双引号,而不是所有引号。这里提供两种可行的方法:

方法一:遍历字符串标记状态

通过遍历字符,判断当前是否处于JSON字符串内部,只转义内部的未转义引号:

const badJson = '{"id":3,"status_id":3,"project_class":"B","project_name":"Magic i-S6/" i-F1"}';

function fixInvalidJson(str) {
  let inString = false;
  let result = '';
  
  for (const char of str) {
    // 遇到未转义的双引号,切换是否在字符串内部的状态
    if (char === '"' && !result.endsWith('\\')) {
      inString = !inString;
    }
    
    // 如果在字符串内部且是未转义的双引号,添加转义符
    if (inString && char === '"' && !result.endsWith('\\')) {
      result += '\\"';
    } else {
      result += char;
    }
  }
  
  return result;
}

// 修复后解析
const fixedJson = fixInvalidJson(badJson);
try {
  const parsedData = JSON.parse(fixedJson);
  console.log('解析成功:', parsedData);
} catch (err) {
  console.error('修复后仍解析失败:', err);
}
方法二:正则表达式匹配(更简洁)

用正则匹配字符串内部的未转义双引号并转义:

const badJson = '{"id":3,"status_id":3,"project_class":"B","project_name":"Magic i-S6/" i-F1"}';

// 匹配不在转义符之后的双引号,且处于字符串内部
const fixedJson = badJson.replace(/(?<!\\)"/g, (match, index) => {
  // 统计当前位置之前的双引号数量,奇数说明在字符串内部
  const quoteCount = (badJson.slice(0, index).match(/"/g) || []).length;
  return quoteCount % 2 === 1 ? '\\"' : match;
});

JSON.parse(fixedJson); // 成功解析

注意事项

  • 处理原始字符串时,要确保JS能正确读取它——比如用单引号或模板字符串包裹,避免JS本身因为未转义引号报错。
  • 手动修复只适用于简单的场景,如果JSON里还有其他复杂的转义情况(比如字符串里有\本身),可能需要更复杂的逻辑,此时还是建议从源头修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:24:29