如何解决JSON解析时SyntaxError: Unexpected token ^ in JSON at position错误
根因说明
- 本身属于JSON标准支持的普通字符,不会直接触发解析错误。你遇到的报错本质是**动态接收的原始字符串中,字符的相邻位置存在未正确转义的非法序列/不可见控制字符**。console.log输出时会自动过滤不可见字符、转换非法转义的展示形式,因此你手动复制的内容已经是处理后的合法JSON字符串,所以硬编码解析正常。
- 最常见的触发原因是Python内核输出时,字符串中混入了单独的反斜杠在^前面,形成
\^的非法转义组合,JSON标准仅支持\"、\\、\/、\b、\f、\n、\r、\t、\uXXXX这几类转义序列,其他带反斜杠的组合都会被判定为非法字符。
解决方案
方案1:字符串清洗后解析(无安全风险,优先推荐)
先对原始字符串做非法内容清洗,再执行JSON.parse,适配绝大多数场景:
function cleanAndParseJson(rawStr) { // 第一步:移除所有JSON不支持的ASCII控制字符 const cleanedControl = rawStr.replace(/[\x00-\x1F\x7F-\x9F]/g, char => { // 保留JSON允许的合法空白字符 if (['\t', '\n', '\r'].includes(char)) return char; return ''; }); // 第二步:删除所有非标准的转义反斜杠 const cleanedEscape = cleanedControl.replace(/\\(?!["\\/bfnrt]|u[0-9a-fA-F]{4})/g, ''); return JSON.parse(cleanedEscape); } // 调用示例 const result = cleanAndParseJson(Kernel_inputs_as_string);
方案2:宽松解析兜底(仅内部可信场景使用)
如果清洗后仍有解析问题,可使用容错性更高的解析方式兜底,该方式可以兼容绝大多数非标准JSON格式,但存在代码注入风险,仅可在数据来源完全可控的场景下使用:
function looseParseJson(rawStr) { return new Function(`return ${rawStr}`)(); }
内容的提问来源于stack exchange,提问作者jax
相关产品推荐
相关产品推荐

