使用方法
JSON转义反转义工具只做一件事:在「可读文本」与「JSON 字符串字面量」之间来回转换,四步:
- 「模式」先选方向:转义(文本变字面量)或反转义(字面量变文本)。
- 在文本框里贴入内容,演示已预填一段带引号和三行的文本。
- 按 Ctrl / Cmd + Enter 执行(文本框里 Enter 留给换行,不触发)。
- 点「复制结果」拿走,再粘回你的代码或配置文件。
下方对照表列出 18 个常见字符的转义写法,前 12 行展开,余下 6 行点「加载更多」。
JSON转义反转义工具能解决什么
它解决「把一段文字塞进 JSON 字符串」这件小事,典型场景有三类:
- 写配置:配置文件里要放多行文本,换行必须写成反斜杠加 n,手写容易漏。
- 调试接口:日志里抓出一串转义字面量,想知道原文长什么样,粘进来一键还原。
- 嵌脚本:把一段文本内联进页面脚本时,引号与小于号需要处理,本页一次转干净。
它不做三件事:不校验整段 JSON 是否合法(只处理字符串字面量)、不做 Base64、不做压缩。要校验整段 JSON 请用专门的格式化工具。
原理和变量
① 到底哪些字符必须转义:JSON 规定字符串里必须转义的有三小类——双引号、反斜杠,以及码位在 U+0000 到 U+001F 之间的 32 个控制字符(换行、回车、制表都属这一类)。
② 控制字符的两种写法:可以用简写 \n、\t,也可以写成全码位 \u000A、\u0009。两者等价,简写更短、更好读。
③ 中文为什么不转:JSON 允许字符串里直接出现非 ASCII 字符,标准里也没有强制转义。本页保持原样,避免把可读的一句话变成一串码位;确实需要纯 ASCII 时,用 codePointAt 转成码位即可。
④ 输入怎么变成输出:原文「他说:"你好"」共 7 个字符,含两个双引号;转义后变成「他说:\"你好\"」,长度 9,两个引号各多出一个反斜杠。原文「第一行…第二行」中间是真实换行,转义后换行变成两个字符 \n,总长度从 7 变成 8。
⑤ 边界与校验:输入为空直接提示;反转义模式下遇到不认识的反斜杠组合(如 \q)会原样保留并在结果里提示出现次数;\u 后面不是 4 位十六进制时不算码位,按普通文本处理。
⑥ 常见误用:一是把整段 JSON 当字符串再转义一次,得到双重转义;二是以为正斜杠必须转义——JSON 允许不转,转义只是习惯;三是把 emoji 按 1 个字符数,其实它在 UTF-16 里占 2 个码元,码位是 U+1F600,转成 \uD83D\uDE00 需要两个码位。
完整示例
演示输入(预填内容):
- 「他说:"你好"」——原文 7 个字符,转义后「他说:\"你好\"」共 9 个字符
- 「第一行」换行「第二行」——原文 7 个字符,转义后换行变成
\n,共 8 个字符 - 「路径 C:\tmp\a.txt」——原文 15 个字符,两个反斜杠各翻倍,转义后 17 个字符
反向执行时,把「他说:\"你好\"」贴回去选反转义,就会还原成带引号的原文。中文与 emoji 在两个方向上都保持原样:「中用」的转义结果仍是「中用」,不会变成 \u4E2D\u6587;😀 若要转成码位,则是 \uD83D\uDE00 这样的代理对。
输入范围与对照表
下表列出 18 个常见字符的转义写法,前 12 行直接展开,余下 6 行点「加载更多」:
| 字符 | 简写形式 | 全码位形式 | 说明 |
|---|---|---|---|
| 双引号 " | \" | \u0022 | JSON 字符串里必须转义 |
| 反斜杠 \ | \\ | \u005C | 本身是转义符,必须成对写 |
| 换行 LF | \n | \u000A | 控制字符 U+000A |
| 回车 CR | \r | \u000D | 控制字符 U+000D |
| 制表 TAB | \t | \u0009 | 控制字符 U+0009 |
| 退格 BS | \b | \u0008 | 控制字符 U+0008 |
| 换页 FF | \f | \u000C | 控制字符 U+000C |
| 正斜杠 / | \/ | \u002F | JSON 允许不转义,源文件里常见转义 |
| 单引号 ' | (不转) | \u0027 | JSON 无单引号字符串,一般不必转 |
| 反引号 ` | (不转) | \u0060 | 模板字符串定界符,嵌入 HTML 时建议转 |
| 竖线 | | (不转) | \u007C | 某些模板引擎会误解析 |
| 小于号 < | (不转) | \u003C | 嵌进内联脚本时建议转 |
| 大于号 > | (不转) | \u003E | 嵌进内联脚本时建议转 |
| 与号 & | (不转) | \u0026 | 嵌进 HTML 属性时建议转 |
| 空字符 NUL | (必须转) | \u0000 | 控制字符 U+0000 |
| 中文「中」 | (不转) | \u4E2D | 非 ASCII,按需转成纯 ASCII |
| 中文「文」 | (不转) | \u6587 | 非 ASCII,按需转成纯 ASCII |
| emoji 😀 | (不转) | \uD83D\uDE00 | U+1F600,UTF-16 代理对 |
输入范围:单次输入建议不超过 20 万个字符;模式只有转义与反转义两档。必须转义的只有双引号、反斜杠与 32 个控制字符,其余字符可转可不转,本页默认不动。
结果边界和舍入
三条边界:
- 只处理字符串字面量,不校验整段 JSON:输入不必是合法 JSON,本页只按字符逐个转义,不做语法解析。
- 不认识的反斜杠组合原样保留:反转义时遇到
\q这类非法组合会照抄,并在结果里提示出现次数,而不是丢掉字符或报错退出。 - 只解一层:输入是双重转义(例如
\\n)时,反转义一次得到\n两个字符,再执行一次才得到真正的换行。本页不递归。
常见问题
哪些字符必须转义?
双引号、反斜杠,以及码位 U+0000 到 U+001F 的 32 个控制字符。其余字符按标准都可以直接写。
中文会被转成 \uXXXX 吗?
默认不会。JSON 允许直接写非 ASCII,本页保持中文原样;需要纯 ASCII 请自行转码位。
转义与反转义能来回切换吗?
能。把结果复制回输入框,切到另一个模式再执行一次即可还原,中间不会丢字符。
为什么转义后长度变长了?
每个被转义的字符都会多出一个反斜杠。换行也算一个字符,但它原本是不可见的,转成两个可见字符后长度自然增加。
emoji 为什么算两个码元?
emoji 😀 的码位是 U+1F600,超出 UTF-16 单码元范围,标准写法是代理对 \uD83D\uDE00,占两个码元。
遇到 \q 这种写法会怎样?
原样保留,并在结果下方提示出现过几次无法识别的组合,不会丢字符。
能校验整段 JSON 是否合法吗?
不能。本页只做字符串字面量的转义与反转义,整段 JSON 校验请用格式化与校验工具。
内容会上传吗?
不会。转换在浏览器本地完成,输入内容不会离开你的设备。