JSON 转义工具
快速对 JSON 字符串进行转义和反转义处理
选择转换方式
什么是 JSON 转义?
JSON 转义是将 JSON 字符串中的特殊字符转换为转义序列的过程。常见的转义字符包括:双引号转为 \",反斜杠转为 \\,换行符转为 \n,制表符转为 \t 等。 使用场景:当需要在 JSON 字符串中嵌入另一个 JSON、在代码中定义 JSON 字符串常量、或在数据库中存储 JSON 数据时,都需要进行转义处理。 实际使用时还要区分“字符串转义”和“完整 JSON 序列化”:前者只处理文本中的特殊字符,后者会同时考虑对象结构、数组、数字、布尔值和空值,混用容易造成多转义或解析失败。
使用方法
使用方法
- 在输入框中粘贴或输入文本
- 点击「JSON 转义」对特殊字符进行转义(如 " 转为 \")
- 点击「JSON 反转义」恢复转义后的字符(如 \" 转为 ")
- 结果会自动显示在下方,可直接复制
转义注意事项
- 仅针对目标上下文进行转义;JSON 字符串、JavaScript 源码、URL 和 HTML 属性各有不同的转义规则。
- 反转义后,请先检查换行符、反斜杠和引号,再粘贴到配置文件中。
使用场景
技术原理
JSON(RFC 8259)是严格的文本语法;每个字符串字面量必须用 ASCII 双引号(U+0022)包裹,任何可能破坏该语法的字符都必须用反斜杠转义。强制转义的字符包括:双引号转义为 \",反斜杠转义为 \\,以及 U+0000 到 U+001F 的 32 个控制字符(包括 \b U+0008、\f U+000C、\n U+000A、\r U+000D、\t U+0009)。U+001F 以上的字符可以作为原始 UTF-8 字节序列出现在字符串中,包括 CJK 表意文字、表情符号、重音字母和其他补充字符。正斜杠可以转义也可以不转义(\/),但惯例是在 JSON 嵌入 HTML <script> 标签时进行转义,以避免 </script> 序列过早关闭外层 script 元素。 实际使用中有两层转义。JSON 转义(语法替换)是 RFC 8259 唯一要求的:它确保字符串是合法的 JSON。Unicode 转义(将每个字符改写为 \uXXXX 或 \u{XXXXX})是表示形式的选择,而非语法要求——它只改变字节在文件中的外观,不改变解码结果。CJK 文本在 JSON 中作为原始 UTF-8 字节是合法的;页面的 Unicode 转义模式将其改写为 \uXXXX,适用于将字符串传入 Java 或 JavaScript 源文件的场景(否则解析器需处理多字节 UTF-8),但会增加每个字符 4-6 字节并降低可读性。 转义规则存在边界情况。JSON.parse 对前导零严格检查(01 是解析错误,尽管 JavaScript 会将其视为八进制 1);V8 的 JSON.stringify 始终产生最小必要转义(控制字符尽可能用 \b/\n/\r/\t/\f,否则用 \uXXXX,斜杠 /、U+2028、U+2029 保留原样以提高可读性)。孤立代理项(高代理项后没有低代理项)在 RFC 8259 下技术上是合法 JSON,但 JSON.parse 的严格模式或 TypeScript 会将其拒绝为 InvalidString;页面的转义模式将孤立代理项替换为 \uFFFD(替换字符),确保输出可被任何标准解析器往返处理。 用于 JavaScript 源码嵌入时,JSON 字符串需要第三层转义:嵌入 JS 字符串字面量中的 JSON 必须对反斜杠本身进行转义。页面的「JS 字符串」输出模式添加了这一双重转义,eval 或 JSON.parse 按钮证明两种编码解码后结果相同。嵌入 HTML 的上下文增加第四层:<、>、& 需要在周围页面中进行 HTML 实体转义,属性值还需要引号转义。JSON 嵌入 HTML 是众所周知的危险做法(上述 </script> 陷阱),最好使用 textContent 赋值或将 JSON.stringify 放入 <script type="application/json"> 块(通过 script.textContent 读取,永远不要用 eval)等安全方式替代。 JSON5(流行的超集)添加了单引号字符串、多行字符串、无引号键名、尾逗号、NaN/Infinity 和单行 // 注释。本页面不产生 JSON5 输出;如需往返处理,请使用专用库。
- JSON 字符串(RFC 8259)必须将双引号转义为 \"、反斜杠转义为 \\,并将 32 个控制字符 U+0000..U+001F(\b \f \n \r \t 及其余用 \uXXXX)转义。U+001F 以上的所有字符作为原始 UTF-8 均合法,包括 CJK、表情符号和重音字母。
- 实际存在两层「转义」:JSON 转义(语法性,必需)使字符串成为合法 JSON;Unicode 转义(表示性)将字符改写为 \uXXXX,只改变可读性,不影响合法性。
- 可选的 / 转义:JSON 允许将 / 转义为 \/。惯例:在 HTML <script> 中嵌入 JSON 时进行转义,避免 </script> 关闭外层标签。
- CJK 在原始 UTF-8 JSON 中无需转义:示例「你好」为 6 个原始字节。页面的 Unicode 转义模式将其改写为 \u4f60\u597d,用于源文件场景,牺牲可读性换取兼容性。
- 孤立代理项:高代理项(U+D800..U+DBFF)后没有低代理项在 RFC 8259 下技术上是合法 JSON,但 JSON.parse 严格模式或 TypeScript 会拒绝它。页面将孤立代理项替换为 \uFFFD,确保输出可通过严格解析器往返处理。
- JSON.parse 严格检查:前导零(01)是解析错误,NaN/Infinity 不是合法字面量,不允许尾逗号。V8 的 JSON.stringify 始终产生最小必要转义,保留斜杠 / 和 U+2028/U+2029 原样以提高可读性。
- JSON 嵌入 JS:将 JSON 字符串放入 JS 字符串字面量时需要对反斜杠进行双重转义。页面的「JS 字符串」输出添加了这层转义;eval 结果与 JSON.parse 解码结果相同。
- JSON5 超集:单引号字符串、多行字符串、无引号键名、尾逗号、NaN/Infinity、单行 // 注释。本页面产生严格的 RFC 8259 JSON,而非 JSON5。
示例
包含双引号和反斜杠的字符串
输入:He said "Hello\World"
输出:He said \"Hello\\World\"包含换行和制表符的字符串
输入:Line1\tIndent\nLine2
输出:Line1\tIndent\nLine2包含中文和双引号的字符串
输入:{"name": "Alice", "msg": "He said \"Hi\""}
输出:{\"name\": \"Alice\", \"msg\": \"He said \\\"Hi\\\"\"}常见问题
JSON 字符串转义具体做了什么?
它会给输入加上引号,并把每个特殊字符替换为 JSON 安全的转义序列:" → \"、\ → \\、换行符 → \n、制表符 → \t、控制字符 → \u00NN。结果是一个合法的 JSON 字符串字面量,可直接粘贴到另一份 JSON 文档或代码编辑器中。
什么时候需要这个功能?
常见场景包括:在 JSON 配置文件里嵌入多行文本;把 JSON 字符串作为命令行参数传递;在 JSON 中嵌套 JSON(例如 API 请求体本身就是一段 JSON 编码字符串);以及在记录用户输入到日志前进行清洗。
JSON 转义和 URL 编码一样吗?
不一样。JSON 转义使用 \n、\"、\u00XX;URL 编码使用 %20、%22、%0A。两者面向不同的语法上下文,规则也不同。请根据目标格式选用对应方式。
反转义模式能处理所有 JSON 转义吗?
可以——支持所有标准转义(\"、\\、\/、\b、\f、\n、\r、\t、\uXXXX)。U+FFFF 以上码点的代理对(如 \uD83D\uDE00 = 😀)会被重新组合为对应表情。格式错误的转义序列会报错,便于你定位修正。
字符串转义和对象序列化有什么区别?
转义是把一段文本变成带引号的 JSON 字符串。序列化(JSON.stringify)是把一个 JavaScript 对象变成完整的 JSON 文档。本页负责前者;后者请在代码编辑器里直接写 JSON,或使用 JSON 格式化工具。
控制字符一定会被转义吗?
是的——这是 JSON 的强制要求。换行符、制表符、NULL 以及其他 ASCII 控制字符(0x00-0x1F)都必须转义,否则结果不是合法 JSON。部分实现还会转义 DEL(0x7F)以及 U+FFFF 以上的字符;本页严格遵循 RFC 8259。
数据会被发送到任何地方吗?
不会。转义和反转义都在你的浏览器内执行,粘贴的文本不会上传。