ToolDeck

JSON 字符串转义

转义和反转义 JSON 字符串中的特殊字符

加载示例

输入

输出

本地运行 · 粘贴密钥安全无忧
结果将显示在此处…

什么是 JSON 字符串转义?

JSON 字符串转义是将字符串内的特殊字符转换为转义序列的过程,使 JSON 解析器能够正确读取而不破坏结构。JSON 规范(ECMA-404 / RFC 8259)要求字符串值中的某些字符前必须加反斜杠。如果不进行正确转义,字符串内的原始双引号或换行符会提前终止字符串,导致解析错误。

每个 JSON 字符串都以双引号作为界定符。当字符串本身包含双引号、反斜杠或控制字符(U+0000 至 U+001F)时,该字符必须替换为对应的转义序列。例如,原始换行符变为 \n,制表符变为 \t,双引号变为 \"。任何 Unicode 码位也可表示为 \uXXXX 形式,其中 XXXX 为四位十六进制值。

反转义(反向操作)将这些反斜杠序列还原为原始字符。当收到的 JSON 载荷中字符串值被双重转义时,或需要从 JSON 日志条目中提取原始文本以在界面或终端显示时,可使用此功能。日志聚合管道中经常遇到此问题:当 JSON 编码的消息作为字符串值存储在另一个 JSON 文档内时,内层字符串中的每个反斜杠都会出现两次。

为什么使用 JSON 转义工具?

手动添加或删除反斜杠既繁琐又容易出错,尤其是处理多行文本、文件路径或嵌入的代码片段时。专用转义工具能捕获手动编辑容易遗漏的边界情况。

🔒
隐私优先处理
您的字符串永远不会离开浏览器。所有转义和反转义操作均在 JavaScript 中本地运行,无需服务器调用,API 密钥、令牌等敏感数据始终保留在本机。
即时转换
粘贴任意文本,即可在毫秒内获得正确转义的 JSON 输出。无需等待与远程服务器的往返。
🛡️
无需账号或安装
打开页面即可开始转义。无需注册表单、无需浏览器扩展、无需安装命令行工具。支持任何配备现代浏览器的设备。
📋
完整字符覆盖
支持所有 JSON 必要转义:双引号、反斜杠、控制字符(U+0000 至 U+001F),以及包含 emoji 和 CJK 字符在内的 Unicode 序列。

JSON 字符串转义使用场景

前端开发
在将用户生成的内容嵌入通过 fetch 或 XMLHttpRequest 发送的 JSON 载荷前进行转义。防止用户输入引号、换行符或 emoji 时产生格式错误的请求。
后端 API 开发
在不自动转义字符串的语言(Shell 脚本、SQL 存储过程、模板引擎)中构建 JSON 响应体。粘贴原始字符串,复制转义后的版本。
DevOps 与配置管理
将多行证书 PEM 块、SSH 密钥或 Shell 脚本嵌入 Terraform、CloudFormation 或 Kubernetes ConfigMap 的 JSON 配置文件中,而不破坏 JSON 结构。
QA 与测试
创建包含边界字符的测试固件:制表符、空字节、Unicode 代理对和嵌套的转义字符串,验证解析器能否正确处理。
数据工程
清理来自 Elasticsearch、CloudWatch 或 Datadog 的双重转义日志条目。通过反转义恢复原始消息,以便进行分析或重新导入。
学习 JSON
直观了解哪些字符需要按 JSON 规范进行转义,适合正在研读 ECMA-404 或构建自己的 JSON 解析器的学习者。

JSON 转义序列参考

JSON 规范定义了两个强制转义(双引号和反斜杠)以及六个常用控制字符的短转义序列。所有其他控制字符(U+0000 至 U+001F)必须使用 \uXXXX 形式。U+FFFF 以上的字符(如 emoji)可表示为 UTF-16 代理对:\uD83D\uDE00。

字符描述转义形式
"Double quote\"
\Backslash\\
/Forward slash\/ (optional)
\nNewline (LF)\n
\rCarriage return\r
\tTab\t
\bBackspace\b
\fForm feed\f
U+0000–U+001FControl characters\u0000–\u001F
U+0080+Non-ASCII (e.g. emoji)\uXXXX or raw UTF-8

JSON 转义 vs. JSON 编码

开发者有时会混淆字符串转义与完整 JSON 文档编码的概念。

字符串转义
作用于 JSON 字符串值内部的文本,将特殊字符替换为反斜杠序列,使字符串在双引号内保持有效。输入:原始文本。输出:转义后的文本(作为有效 JSON 仍需在外面加双引号)。
JSON 编码(序列化)
将整个数据结构(对象、数组、数字、布尔值、null)转换为 JSON 文本表示。字符串转义是这个更大过程中的一个步骤。输入:数据结构。输出:完整的 JSON 文档。

代码示例

主流语言均内置了相应功能。以下是 JavaScript、Python、Go 和 jq 的示例:

JavaScript (browser / Node.js)
// JSON.stringify escapes a value and wraps it in quotes
JSON.stringify('Line 1\nLine 2')       // → '"Line 1\\nLine 2"'

// To get just the inner escaped string (no surrounding quotes):
const escaped = JSON.stringify('She said "hello"').slice(1, -1)
// → 'She said \\"hello\\"'

// Parsing reverses the escaping
JSON.parse('"tabs\\tand\\nnewlines"')  // → 'tabs\tand\nnewlines'

// Handling Unicode: emoji in JSON
JSON.stringify('Price: 5\u20ac')       // → '"Price: 5\u20ac"' (raw euro sign)
Python
import json

# json.dumps escapes and quotes a string
json.dumps('Line 1\nLine 2')           # → '"Line 1\\nLine 2"'

# Ensure ASCII: replace non-ASCII with \uXXXX sequences
json.dumps('Caf\u00e9', ensure_ascii=True)   # → '"Caf\\u00e9"'

# Keep UTF-8 characters as-is (default in Python 3)
json.dumps('Caf\u00e9', ensure_ascii=False)  # → '"Caf\u00e9"'

# Unescape by round-tripping through json.loads
json.loads('"She said \\"hello\\""')      # → 'She said "hello"'
Go
package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	// json.Marshal escapes a Go string for JSON
	raw := "Line 1\nLine 2\tindented"
	b, _ := json.Marshal(raw)
	fmt.Println(string(b))
	// → "Line 1\nLine 2\tindented"

	// Unescape with json.Unmarshal
	var out string
	json.Unmarshal([]byte(`"She said \"hello\""`), &out)
	fmt.Println(out)
	// → She said "hello"
}
CLI (jq)
# Escape a raw string into a JSON-safe value
echo 'Line 1
Line 2	with tab' | jq -Rs '.'
# → "Line 1\nLine 2\twith tab\n"

# Unescape a JSON string back to raw text
echo '"She said \"hello\""' | jq -r '.'
# → She said "hello"

常见问题

JSON 字符串中哪些字符必须转义?
JSON 规范(RFC 8259)要求转义双引号(\")、反斜杠(\\)以及 U+0000 至 U+001F 的所有控制字符。正斜杠(/)可以转义为 \/,但这是可选的。其他所有 Unicode 字符,包括非 ASCII 文本和 emoji,只要文档使用 UTF-8 编码,均可直接出现而无需转义。
JSON 转义和 JSON stringify 有什么区别?
JavaScript 中的 JSON.stringify() 将整个 JavaScript 值序列化为 JSON 字符串,添加外层双引号并转义内部的特殊字符。JSON 转义特指将特殊字符替换为反斜杠序列的字符级操作。对字符串调用 JSON.stringify() 时,转义是序列化过程的一部分。
如何在 JSON 中转义换行符?
将原始换行字符(U+000A)替换为两字符序列 \n。同样,回车符(U+000D)变为 \r。如果在 Python 中使用 JSON.stringify() 或 json.dumps(),这些替换会自动完成。
为什么我的 JSON 字符串被双重转义了?
双重转义发生在字符串被序列化两次时。例如,对已包含转义序列的字符串调用 JSON.stringify(),会再次转义其中的反斜杠:\n 变为 \\n。解决方法是先用 JSON.parse() 解析一次,再重新序列化,或检查处理管道中是否存在多余的编码步骤。
JSON 字符串中可以使用单引号吗?
不可以。JSON 规范要求所有字符串值和属性名必须使用双引号。单引号不是有效的 JSON,会导致解析错误。如果源数据包含单引号,在 JSON 双引号字符串内无需转义,因为单引号在该上下文中是普通字符。
在 JSON 中使用未转义的 UTF-8 字符安全吗?
安全,只要 JSON 文档以 UTF-8 编码——RFC 8259 将其规定为默认且推荐的编码方式。带重音的字母、CJK 表意字符和 emoji 均可直接出现在字符串中,无需 \uXXXX 转义。某些旧系统要求纯 ASCII 的 JSON;在这种情况下,可使用 Python 中的 ensure_ascii 选项或对应语言中的类似标志。
如何在 JSON 中转义 emoji?
U+FFFF 以上的 emoji 在 JSON 中使用 UTF-16 代理对表示。例如,咧嘴笑脸(U+1F600)变为 \uD83D\uDE00。大多数序列化工具会自动处理。如果手写 JSON 或工具仅支持基本多文种平面,请使用代理对表示法;否则可直接使用 UTF-8 字符。