# 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;
}
上一篇: 下一篇:
本章目录