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

JSON.parse报Bad control character错误的原因及解决方法

问题原因

JSON语法规则明确要求:字符串中的控制字符(比如制表符、换行符这类不可见字符)不能直接存在,必须用转义序列(比如\t代表制表符)来表示。

你示例代码里的字符串s存在两个问题:

  1. 字符串中的"asdf asdfdaf"包含了真实的制表符字符,而非JSON要求的\t转义格式;
  2. 用了HTML实体"代替双引号,这也不符合JSON的语法规范。

当JSON.parse解析时,遇到未转义的控制字符就会触发语法错误。

解决方案

方法一:手动构造合法的JSON字符串

如果是自己编写JSON字符串,需满足两个要求:

  • 把真实的控制字符替换为JSON转义序列,同时在JavaScript字符串里转义反斜杠(即用\\t代替真实制表符);
  • 直接使用双引号",不要用HTML实体"。

示例代码:

let s = '{"adf":"asdf\\tasdfdaf"}';
JSON.parse(s); // 正常执行

这里的\\t在JavaScript中会被解析为\t,完全符合JSON对制表符的转义要求。

方法二:处理外部传入的非标准字符串

如果字符串是从外部获取的(比如接口返回、富文本内容),先做两步预处理再解析:

  1. 把HTML实体"替换为真实的双引号";
  2. 把字符串里的控制字符(比如制表符、换行符)替换为JSON认可的转义序列。

示例代码:

let s = '{"adf":"asdf	asdfdaf"}';
// 替换HTML实体为双引号
s = s.replace(/"/g, '"');
// 替换制表符为JSON转义序列,其他控制字符可扩展正则一起处理
s = s.replace(/[\t\n\r]/g, match => '\\' + match);
JSON.parse(s); // 正常解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:25:20