在线 JSON 转义与反转义:处理复杂嵌套数据的正确姿势

2024-04-15

日志、消息队列和数据库字段里经常出现「JSON 的 JSON」:外层是字符串,内层才是对象。理解转义与反转义规则,是处理这类嵌套数据的关键。

哪些字符必须转义?

在 JSON 字符串内,以下字符需加反斜杠:双引号 "、反斜杠 \、退格 \b、换页 \f、换行 \n、回车 \r、制表 \t。

其他 Unicode 字符可直接写,或用 \uXXXX 表示。

{
  "quote": "He said \"Hello\"",
  "path": "C:\\temp\\data",
  "multiline": "line1\nline2"
}

嵌套 JSON:字符串里存 JSON

合法做法:内层 JSON 作为字符串 value,内层双引号全部转义。

解析时分两步:先 JSON.parse 外层,再对字符串字段 JSON.parse 内层。

{
  "payload": "{\"id\":1,\"name\":\"Alice\"}"
}

双重转义:日志里常见的坑

日志系统为展示可能对字符串再次转义,复制出来会看到 \" 甚至 \\\"。

不要手动数反斜杠;应逐步 parse:每 parse 一次,看结果仍是字符串还是对象,直到得到目标结构。

在线工具格式化可快速看出当前处于「字符串」还是「对象」层级。

反转义的安全做法

优先使用语言内置 JSON.parse,不要正则替换 \" → "——容易误伤正常内容。

若数据不可信,parse 后再做结构校验,避免原型污染(如 __proto__ 键)。

嵌入 SQL、Shell、HTML 时的区别

JSON 转义规则与 SQL 字符串、Shell 单引号规则不同;不要混用一层转义解决所有场景。

正确流程:先构造 JavaScript/业务对象 → JSON.stringify → 再嵌入目标上下文并按需额外转义。

推荐工作流

1. 将原始文本粘贴到 JSON 工具。

2. 若整体 parse 失败,检查是否被包在额外引号里,或存在双重转义。

3. 格式化成功后,对仍是字符串的字段继续 inner parse。

4. 最终得到对象后,再业务校验与类型检查。