JSON 转义到底改变了什么?
JSON 文本本身可以包含双引号、反斜杠和换行。当它需要放进另一个字符串中时,这些字符会与外层字符串的语法冲突。转义会使用反斜杠表示它们,并在整体外面加上一对双引号;原始数据没有被格式化或重排,只是换了一种可嵌入的表达方式。
| 原始字符 | 转义表示 | 为什么需要 |
|---|---|---|
双引号 " | \" | 避免提前结束外层 JSON 字符串。 |
反斜杠 \ | \\ | 保留原来的转义含义。 |
| 换行 | \n | 让多行文本可以放在同一个字符串字面量中。 |
| 制表符 | \t | 避免控制字符破坏 JSON 语法。 |
什么时候应该转义,什么时候应该格式化?
需要转义
你要把一段 JSON 放进另一个 JSON 字段、JavaScript 字符串、日志字段或需要字符串参数的配置项。
需要格式化
你只是想阅读接口响应、检查缩进、对比字段或复制一份标准 JSON 请求体。
需要压缩
你有合法 JSON,目标是减少传输中的空白字符,而不是把它当作字符串内容。
需要修复
输入本身不合法,例如单引号、末尾多余逗号或括号缺失;此时先到 JSON 修复页处理。
去转义失败,通常是这几种原因
- 忘了粘贴最外层双引号。去转义操作读取的是完整 JSON 字符串,而不是其中的一段字符。
- 反斜杠在复制过程中又被某一层语言或命令行处理过,需要确认你粘贴的是实际文本,而不是已经被解释后的显示结果。
- 字符串中存在
\x之类 JSON 不支持的转义写法。JSON 只接受标准的引号、反斜杠、斜杠、控制字符和\uXXXX转义。
转义不等于加密,也不会隐藏敏感数据。它只解决文本在另一层字符串语法中的表示问题;密钥、令牌和个人信息不应因此被放进公开日志或前端代码。
常见问题
- 转义后的结果还是合法 JSON 吗?
- 是。它是一个 JSON 字符串值,内容是原始 JSON 文本;如需恢复对象,还需要在代码中再执行一次 JSON 解析。
- 为什么去转义后没有自动格式化?
- 去转义只恢复字符串内容,不改变其中空白和字段顺序。恢复后可前往 JSON 格式化页继续处理。
- 可以处理中文和 Emoji 吗?
- 可以。浏览器会保留 Unicode 字符;只有需要表达控制字符或引号时才使用相应的 JSON 转义。