JSON 转义/去转义

JSON 转义/去转义是免费在线工具:把任意文本一键转成能直接嵌进代码、配置或接口参数的 JSON 字符串,引号、反斜杠、换行都会被正确转义;也能把日志里带反斜杠的 JSON 转义串还原成原样 JSON。被转义好几层的可一键解到底,非法转义会指明第几行第几列与原因,原样保留、不吞字。浏览器本地计算、文本不上传。

层数
拖入 .json / .txt / .log 文件,或点击选择
文本不上传 · 浏览器本地处理 · 也可直接粘贴 · 单文件 ≤ 10 MB
输入
结果

在上方粘贴文本,或点「填入示例」。

如何使用JSON 转义/去转义

1

JSON 转义/去转义怎么用:把文本粘进输入框,或直接拖入 .json / .txt / .log 文件;不确定从哪开始就点「示例」看效果。文本只在你的浏览器里处理,不上传。

2

选方向与选项:默认是「去转义」并只解一层;日志里被转了好几层的选「解到底」,结果是 JSON 时可勾「自动美化」。要把原文变成 JSON 字符串就切到「转义」,按需勾外层双引号、中文转 \uXXXX、斜杠转 \/ 或嵌入 script 安全。

3

拿结果:一键复制或下载;统计条会告诉你解了几层、有几处问题。问题列表里的每一条都写明第几行第几列与原因,点「定位」直接选中原文里出错的那一段。

关于JSON 转义/去转义的常见问题

在线 JSON 去转义会上传粘贴的内容吗?
不会。JSON 转义与去转义全部在你的浏览器里用 JavaScript 完成,粘贴的文本、拖入的文件和转换结果都不会发送到任何服务器。本页只把方向、层数、宽松模式这几项参数偏好记在本机 localStorage,原文与结果一个字都不落盘。想自证可以打开 F12 的网络面板再转一次,转换过程没有任何请求;页面本身会加载一个访问统计脚本,它不读取也不上报你粘贴的内容。
JSON 字符串里的反斜杠是什么意思?怎么去掉?
反斜杠是 JSON 的转义符:字符串里不能直接出现双引号、反斜杠和换行,于是写成 \" \\ \n 这样的两字符序列。它们是在序列化时加上去的,并不是数据本身。要去掉,把文本粘进本页选「去转义」即可,工具会按 JSON 规范逐个还原,而不是简单地把反斜杠删光——那样会把 \\ 和 \n 一起弄坏。
日志里转义过的 JSON 字符串怎么还原成对象?
这是最常见的用法:日志框架或消息队列把整段 JSON 当成普通字符串又序列化了一次,于是满屏都是 \"。把那段文本整段粘进来,保持「去转义」,勾上「结果是 JSON 时自动美化」,就能直接得到缩进好的 JSON 对象,雪花 ID 这类大数字也按原文保留。之后要校验、压缩或排序 key,可以接着用 JSON 格式化。
被转义好几层的 JSON 怎么一次去转义?
选「解到底」。工具会一层层自动去转义,统计条告诉你一共解了几层,最多 8 层,超过会停下并提醒你检查输入。它在某一层结果里出现未转义的双引号时就会停:那说明已经得到真正的 JSON 了,再解就会把字符串内部的 \n 变成真换行,反而把 JSON 弄坏。
JSON 转义工具和 JSON 格式化有什么区别?
默认参数下两边的结果逐字相同,本页的单测就是拿两者互相对照锁住的。区别在于:JSON 格式化页的转义只是附带的两个按钮,只解一层、报错只有引擎原文;本页多了一键解到底、问题按行列定位且坏片段原样保留、宽松模式认 JS 与 Python 的写法,以及中文转 \u、斜杠转 \/、嵌入 script 安全、转义多层这几个开关。要美化或校验整段 JSON 请用 JSON 格式化。
JSON 转义时中文要不要转成 Unicode 编码?
不必。JSON 规范允许字符串里直接出现中文,JavaScript 的 JSON.stringify 和 Go 默认都原样输出。只有对接只认 ASCII 的老系统,或者你想让结果和 Python json.dumps 的默认输出(ensure_ascii=True)一模一样时,才勾「中文等非 ASCII 转 \uXXXX」。要查某个字的码点或在十种写法之间互转,请用 Unicode 转换。
JSON 去转义报错「非法转义」是什么原因?
JSON 只认 9 种转义:\" \\ \/ \b \f \n \r \t 和 \uXXXX,其它反斜杠组合都不合法。最常见的两个来源是 JS 或 Python 字符串里的 \x41 和单引号转义,以及没有转义过的 Windows 路径,比如 C:\new。本页遇到非法转义会原样保留这两个字符,在问题列表里写明第几行第几列,其余部分照常还原;如果文本来自 JS 或 Python,打开「宽松模式」即可。
JS、Python 的单引号转义能用 JSON 去转义吗?
可以,打开「宽松模式」。它会额外认出 JS 与 Python 字符串常用的单引号转义、\x41 这类两位十六进制、\v、\0、ES6 的 \u{1F600} 写法和行尾续行,还认单引号包起来的整段字面量,并在问题列表里注明按宽松规则还原了几处。输出仍是普通文本,本页不做 JSON5 或单引号 JSON 的整文档解析。
JSON 字符串里的换行和 Tab 必须转义吗?
必须。JSON 规定字符串里的 U+0000 到 U+001F 控制字符都必须转义,换行要写成 \n,Tab 要写成 \t,否则 JSON.parse 会直接报错。本页转义时会自动处理;去转义时如果正文里本来就有真换行,会原样保留并给一条提示,因为那通常说明这段文本并不是标准的 JSON 字符串。
JSON 转义后放进 HTML 的 script 里安全吗?
默认的转义不处理尖括号,字符串里如果出现 script 结束标签,浏览器会在那里提前结束整个 script 块。勾选「嵌入 script 安全」后,尖括号与 & 会写成 \u003c \u003e \u0026,U+2028 和 U+2029 也会转义,这和 Go 的默认行为一致。它只解决提前闭合与断行这两个问题,不能替代完整的 XSS 防护;要放进 HTML 正文请改用 HTML 实体转换。
JSON 转义要不要把斜杠 / 也转义?
不需要。JSON 规范里 / 写成原样和写成 \/ 都合法,解析结果完全相同。JavaScript、Python、Go 默认都不转;PHP 的 json_encode 默认会转,所以从 PHP 接口拿到的 JSON 里常见 \/。想让输出和 PHP 一致就勾「/ 转成 \/」,去转义时两种写法都能还原。
emoji 做 JSON 转义后为什么变成两段编码?
因为 \uXXXX 写的是 UTF-16 码元,最大只到 U+FFFF,而大部分 emoji 的码点超出这个范围,只能拆成两段代理对来写,比如笑脸会变成高位与低位两段。这是规范行为,去转义时本页会把两段合回一个 emoji。如果只剩半段,本页不会产出乱码或问号,而是原样保留那段转义写法并在问题列表里标出来。
JSON 去转义和 Unicode 转换有什么区别?
处理的层次不同。JSON 去转义处理的是 JSON 字符串语法:引号、反斜杠、换行和 \uXXXX;Unicode 转换处理的是字符与码点写法之间的互转,支持 中、U+4E2D、%u4E2D 等十种记法,但不碰引号和换行。日志里的 JSON 用本页,只想把 \u4e2d 这类码点写法变回中文或查码点用 Unicode 转换。
手机上能做 JSON 转义和去转义吗?
可以。本页在手机浏览器里同样可用,输入框与结果框会上下排列,按钮都按手指点击的尺寸做了放大。处理全部在本机完成,不需要安装任何应用,也不需要联网之外的权限,复制结果后可以直接粘回聊天或工单。
JSON 去转义能处理多大的文本和文件?
单次最多 500 万字,可以直接拖入 10 MB 以内的 .json、.txt、.log 文件,按 UTF-8 读取,开头的 BOM 会自动去掉并提示。文本在 50 万字以内时边输入边自动出结果;超过 50 万字会暂停自动转换,改为点「开始转换」,避免每敲一个字都把整段文本扫一遍。

JSON 转义字符对照表:哪些字符必须转义

JSON 字符串里有三类字符必须转义:双引号、反斜杠,以及 U+0000 到 U+001F 的控制字符(换行、 回车、Tab 等)。其中 8 个有专门的短写法,其余控制字符一律写成 \u00xx。下表 最后几行是可选的转义:不转也合法,只是某些语言默认会转,或者某些场景下转了更稳妥。json 转义字符、json 换行符转义、json 双引号转义说的都是这张表。

JSON 转义字符对照:字符、名称、JSON 写法与常见来源
字符名称JSON 写法常见来源
"双引号\"字符串里的引号、HTML 属性、嵌套 JSON
\反斜杠\\Windows 路径、正则表达式、已转义过的文本
换行 LFU+000A\n多行文本、日志、SQL、Markdown
回车 CRU+000D\rWindows 换行(CRLF)的前半段
制表符 TabU+0009\t从 Excel / 表格复制的文本
退格U+0008\b终端输出、控制字符残留
换页U+000C\f老式打印文本、PDF 抽取
其它控制字符U+0000–U+001F\u0001 等二进制残留;JSON 规定必须转义
/斜杠(可选)\/PHP json_encode 默认、老系统风格;不转也合法
中文 / emoji非 ASCII(可选)\u4e2dPython ensure_ascii、只认 ASCII 的老系统
< > &HTML 敏感字符(可选)\u003c \u003e \u0026嵌入 HTML 的 script 标签,Go 默认
行分隔符U+2028 / U+2029(可选)\u2028 \u2029老版 JS 引擎不允许它们出现在字符串字面量里

本页转义时十六进制一律输出小写,与 JavaScript 的 JSON.stringify、Python 与 Go 保持一致; 去转义时大小写都认,\u4E2D 与 \u4e2d 一样能还原。

为什么日志里的 JSON 会出现一堆反斜杠

原因几乎总是同一个:一段本来好好的 JSON,被当成普通字符串又序列化了一次。日志框架把对象 写成 message 字段、消息队列把报文塞进 payload、数据库用 text 字段存 JSON,都会发生这件事。 每多序列化一次,原来的每个双引号前就多出一批反斜杠。日志里的 json 怎么还原、转义后的 json 怎么还原,答案都是数一数反斜杠,然后去转义对应的层数。

同一个 {"a":1} 被转义 1、2、3 层后的样子(由本页实时计算)
层数转义结果每个引号前的反斜杠
1 层{\"a\":1}1 个
2 层{\\\"a\\\":1}3 个
3 层{\\\\\\\"a\\\\\\\":1}7 个

规律是:k 层转义后,每个引号前有 2 的 k 次方减 1 个反斜杠,也就是 1、3、7 个。看到\\\" 就是两层,选「解到底」一次解完即可。举个真实的例子,下面这行来自 一条登录日志:

{\"user\":\"小鹿\",\"msg\":\"登录成功\\n来自 iOS\",\"id\":12345678901234567890}

去转义一层之后就是一段合法的 JSON,其中的大数字原样保留:

{"user":"小鹿","msg":"登录成功\n来自 iOS","id":12345678901234567890}

在代码里做同一件事:去转义一层相当于调用一次 JSON.parse(Python 是 json.loads),转了几层就解析几次。 有两个常见的坑:一是从日志里抠出来的转义串通常不带外层双引号,要先在两头补上引号再解析,否则直接报错; 二是 JavaScript 的 JSON.parse 会把超过 2 的 53 次方的整数就近取整,比如 {"id":9007199254740993} 解析后 id 变成 9007199254740992,末位悄悄差了 1。雪花 ID、订单号常在这个量级,本页美化时按原文保留数字, 不经过 JS 的数值类型。

JSON 多层转义去转义什么时候该停

「解到底」不是把反斜杠删光,而是一层层还原,直到得到真正的 JSON 为止。本页的规则是:某一层 结果里一旦出现未转义的双引号,就说明它已经是 JSON 文档本身,立刻停下。 因为 JSON 字符串内部的 \n 是数据的一部分,必须保留。

同一段输入:按规则停下 vs 无脑删光反斜杠
做法结果还是合法 JSON 吗
原始输入{\"msg\":\"l1\\nl2\"}不是,它是一段转义过的字符串
本页解到底(停在第 1 层){"msg":"l1\nl2"}是,msg 的值是两行文本
把反斜杠全删掉{"msg":"l1nl2"}是,但换行没了,数据被改了

另外两条兜底:最多解 8 层,每一层都必须让文本变短,否则立即停止;某一层出现非法转义也会停在 那一层,不会拿坏数据继续往下猜。只有反斜杠、没有转义引号的普通文本(比如 C:\Users)解一次 就停,不会把 \U 当成转义。

JSON 去掉反斜杠:为什么不建议用替换来去转义

很多人第一反应是在编辑器或代码里用替换:把 \" 换成 "。 这种做法在简单样本上看起来没问题,一碰到真实数据就会出错。json 去除转义符、json 去掉反斜杠、 去掉 json 里的斜杠,正确做法都是按规范逐个解析,读到反斜杠就连同下一个字符一起处理。

替换法的三个反例
输入正确结果替换法为什么会错
a\\"ba\"b先替 \" 会把「字面反斜杠 + 引号」错拆,留下一个多余或缺失的反斜杠
l1\nl2l1 + 换行 + l2只替引号的话 \n 原样留着,多行文本仍是一行
\u4e2d\u6587中文\uXXXX 要按十六进制算码元,还要把 emoji 的两段合起来

本页的去转义是单遍扫描的状态机,不会出现「先替这个再替那个」的顺序问题。如果你确实需要按 规则批量改文本,请用 查找替换 或先在 正则表达式测试 里验证表达式。

JSON 转义选项怎么选:ensure_ascii 与斜杠

不同语言的 JSON 库默认行为并不一样,同一段文本序列化出来可能长得不同,但它们都是合法 JSON, 解析结果完全相同。下表是四种常见实现的默认行为,以及想在本页得到同样输出该勾哪个开关。

四种语言 JSON 序列化的默认行为
实现中文等非 ASCII斜杠 /尖括号与 &本页对应开关
JavaScript JSON.stringify不转,原样输出不转不转本页全部开关关闭时与它逐字相同
Python json.dumps转成 \uXXXX(ensure_ascii=True),0x7F 也转不转不转勾「中文等非 ASCII 转 \uXXXX」
PHP json_encode转成 \uXXXX(加 JSON_UNESCAPED_UNICODE 才不转)转成 \/(加 JSON_UNESCAPED_SLASHES 才不转)不转(加 JSON_HEX_TAG 等选项才转)勾「非 ASCII 转 \uXXXX」与「/ 转成 \/」
Go json.Marshal不转,原样 UTF-8不转转成 \u003c \u003e \u0026,U+2028/2029 也转勾「嵌入 script 安全」

JSON 转义工具支持哪些功能

  • 本地处理不上传:json 转义不上传任何内容,断网也能用,只记参数偏好不记文本。
  • 多层一键解到底:json 多层转义、json 双重转义都能一次还原,并告诉你共几层。
  • 行列定位、不吞字:非法转义、半个代理、末尾反斜杠原样保留,点「定位」选中原文。
  • 严格与宽松两种口径:严格模式只认 JSON 的 9 种转义,宽松模式额外认 JS/Python 写法。
  • 与 JSON.stringify 逐字一致:默认转义结果和 json stringify 在线运行的结果完全相同。
  • 大数字美化不改写:json 字符串转 json 对象并美化时,超长整数按原文保留。

这件事的叫法很多:json 转义在线、json 在线转义、json 转义工具、json 字符串转义、json 字符串化、文本转 json 字符串说的是转义方向;json 去转义在线、json 反转义、json 转义还原、字符串转 json、json 反斜杠怎么去掉、json 里的 \n 怎么还原说的是去转义方向;json 中文转 unicode 对应「非 ASCII 转 \uXXXX」开关,json 转义斜杠对应「/ 转成 \/」开关。英文里通常叫 json escape、json unescape、json string escape online 或 unescape json string。还原出 JSON 之后,可以接着用 JSONPath 查询 取字段、用 JSON 对比 找差异,或用 JSON 转 TypeScript 生成类型;要查码点请用 Unicode 转换。