json.stringify()自动转义双引号、反斜杠、换行符、回车符、制表符、退格符、换页符及u+0000–u+001f控制字符为uxxxx形式,无需手动escape,直接调用即可生成安全json字符串。

JSON.stringify() 会自动处理字符串中的特殊转义字符,无需手动干预——它遵循 JSON 规范,对控制字符、引号、反斜杠等进行标准转义。
哪些字符会被自动转义
JSON.stringify() 在序列化字符串时,会对以下字符插入反斜杠进行转义:
- 双引号(")→ "
- 反斜杠()→ \
- 换行符( )→
- 回车符( )→
- 制表符( )→
- 退格符()、换页符()也按规范转义
- ASCII 控制字符(U+0000–U+001F)→ 使用 uXXXX 形式编码
实际例子对比
看一段含多种特殊字符的原始字符串:
const str = 'He said: "Hello World!" and used \path\file.txt';
经 JSON.stringify(str) 后得到:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
"He said: "Hello\n\tWorld!" and used \\path\\file.txt"
注意:输出是合法 JSON 字符串字面量,双引号被包裹,内部引号和换行、制表、反斜杠均已正确转义。
避免常见误解
有人误以为需要先手动 escape 字符串再传给 JSON.stringify(),这是不必要的,反而会导致双重转义:
- ❌ 错误做法:
JSON.stringify(escape(str))或str.replace(/"/g, '\"') - ✅ 正确做法:
JSON.stringify(str)直接调用即可 - 如果目标是生成可直接用于 HTML
data-*属性或 JS 字符串字面量的值,仍应使用JSON.stringify()—— 它输出的就是安全、可嵌入的 JSON 字符串
自定义转义行为(进阶)
若需额外控制(如保留某些 Unicode 字符不转义为 uXXXX,或过滤掉不可见控制符),可通过 replacer 函数预处理:
const safeStringify = (obj) => {
return JSON.stringify(obj, (key, value) => {
if (typeof value === 'string') {
// 移除 ASCII 控制字符(U+0000–U+001F),但保留
return value.replace(/[u0000-u0008u000Bu000Cu000E-u001F]/g, '');
}
return value;
});
};
注意:不要在 replacer 中对字符串做重复转义,JSON.stringify() 仍会在后续步骤中统一处理剩余字符。










