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