首页/开发/正则与编码速查/JSON 字符串转义规则要点

JSON 字符串转义规则要点

JSON 字符串只有双引号、反斜杠和 U+0000 至 U+001F 控制字符必须转义,合法转义固定为几个简写加 \uXXXX;单引号、\x、注释、尾逗号都是语法错误,工程上应交给标准 JSON 编码器生成而非手工拼接。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

JSON 字符串的转义义务

JSON 字符串必须用双引号包裹,只有三类字符被强制转义:双引号、反斜杠,以及 U+0000 到 U+001F 的控制字符。其余字符可以直接出现,中文与 emoji 原样写在字符串里也合法,只要整个文本按 UTF-8 编码。合法转义形式是固定的几个,任何写法上的方言都会让解析器直接抛语法错误。

合法转义一览

必须转义双引号、反斜杠、U+0000 到 U+001F 的控制字符
可选转义斜杠允许写成 \/,语义相同,嵌套在 HTML 脚本里时常用
简写转义\b \f \n \r \t 对应退格、换页、换行、回车、制表
Unicode 转义\uXXXX 恰好 4 位十六进制,非 BMP 字符需写成代理对
明确非法\x41、\'、\0、\u{1F600}、字面换行、注释、尾逗号

典型使用场景

  • 手工拼接请求体:确认引号与反斜杠是否转义
  • 把正则或 Windows 路径写进配置:反斜杠必须成对
  • 日志字段拼接:换行写成 \n,否则解析即失败
  • 排查 .json 配置报错:多半是多出的逗号或不认识的转义
  • 跨语言交互:用各语言标准库的编码器生成,别用模板拼接

正确与错误写法

正确与错误写法
{
  "path": "C:\\logs\\app.log",   // 反斜杠成对,解析后是 C:\logs\app.log
  "re": "^\\d{3}-\\d{4}$",       // 正则的 \d 在 JSON 里要写成 \\d
  "msg": "line1\nline2",           // 换行用 \n,不能真的换行
  "emoji": "\uD83D\uDE00",        // 非 BMP 用代理对
  "url": "https:\/\/example.com/a"  // \/ 合法但非必需
}

常见报错与病因

报错关键词病因修法
Bad control character in string literal字符串里插了真实换行或制表符改成 \n、\t
Bad escaped character用了 \x 或 \' 之类方言改成 \uXXXX 或去掉反斜杠
Unexpected token '用了单引号或未加引号的键统一改双引号
Unexpected end of JSON input转义吃掉闭合引号或内容被截断检查转义引号是否配对
Unexpected non-whitespace after JSON存在尾逗号或注释删除注释与尾逗号
RFC 8259 要求用于交换的 JSON 文本为 UTF-8。落盘时选无 BOM 的 UTF-8,写成 UTF-16 或带 BOM 的文件在部分解析器上会直接报错。
不要手写编码器。JSON.stringify、Python 的 json.dumps、Java 的 Jackson、Go 的 encoding/json 都会正确处理引号、控制字符与代理对;模板拼接最容易漏掉反斜杠与换行。

易错点

  • 把 JSON 当 JS 对象字面量写:单引号、\x41、尾逗号、注释统统非法,解析器只给出语法错误而不会告诉你哪里错了
  • 只转义双引号漏掉反斜杠,输入末尾的单个反斜杠会把闭合引号转义掉,报错位置常在文件末尾而非真正出错处
  • 字符串里粘贴了真实换行:规范禁止裸控制字符,若出现在 HTTP 头或日志里还可能被中间件误解为分隔
  • 非 BMP 字符用单个 \uXXXX 表示,截断成半个代理对,前端显示为乱码或替换字符
  • 忘记 JSON 是 UTF-8 交换格式,用 GBK 保存配置文件,中文键值在别的机器上读出来是乱码

数据来源与参考

  • RFC 8259:JSON 数据交换格式
  • ECMA-404:JSON 数据交换格式
  • MDN:JSON.stringify 与 JSON.parse

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/json-string-escaping.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​