# JSON 特殊字符的处理

# 1. 介绍

概念:

名词 说明 示例
JSON 对象 由键值对组成,值的类型只能为 数字、字符串、布尔值、null { key: 'hello'}
JSON 字符串 JSON 对象序列化后的字符串文本 '{ "key": "hello" }'

转化:

  • JSON 对象 --> JSON 字符串: JSON.stringify({ key: 'hello' })
  • JSON 字符串 --> JSON 对象: JSON.parse('{ "key": "hello" }')

# 2. 字符串类型

分类:

  • 普通字符
  • 转义字符

转义字符:

  • \":双引号
  • \\: 反斜线
  • \b: 退格符
  • \f: 换页符
  • \t: 制表符
  • \n: 换行符
  • \r: 回车符
  • \u: 特殊字符,如 \u263A 笑脸符号

转义字符在 JSON 对象及 JSON 字符串中的表现形式:

转义字符 JSON 对象 JSON 字符串
双引号 { key: '\"' } '{ "key": "\\"" }'
反斜线 { key: '\\' } '{ "key": "\\\\" }'
退格符 { key: '\b' } '{ "key": "\\b" }'
换页符 { key: '\f' } '{ "key": "\\f" }'
制表符 { key: '\t' } '{ "key": "\\t" }'
换行符 { key: '\n' } '{ "key": "\\n" }'
回车符 { key: '\r' } '{ "key": "\\r" }'
特殊字符 { key: '\u263A' } (笑脸字符) '{ "key": "\\u263A" }'

# 3. JSON 字符串中转义字符的处理

说明:

  • 当 JSON 字符串中,转义字符的错误处理会导致 JSON 字符串转化为 JSON 对象 失败。

比如:

  • JSON 对象:{ key: '\n' }
  • 正确的 JSON 字符串:'{ "key": "\\n" }'
  • 错误的 JSON 字符串:'{ "key": "\n" }'

处理:

  • brokenJsonString.replace(/\n/g, '\\n')

注意:

  • 只能处理如下转义字符:

    • \f: 换页符
    • \t: 制表符
    • \n: 换行符
    • \r: 回车符

代码:

function fixSpecialChar(brokenJsonString) {
  if (typeof brokenJsonString !== 'string') {
    return brokenJsonString;
  }

  /*
    \f: 换页符
    \t: 制表符
    \n: 换行符
    \r: 回车符
  */
  const fixedJsonString = brokenJsonString
    .replace(/\f/g, '\\f')
    .replace(/\t/g, '\\t')
    .replace(/\n/g, '\\n')
    .replace(/\r/g, '\\r')
  ;

  return fixedJsonString;
}
本章目录