Json 解析思路简析
Json 字符串和 HTML 语法非常像,是一种解释型语言(暂且称之为语言)。
之所以称之为语言,是因为我们可以以解析编程语言的方式解析 Json 字符串。
编程语言解析无非三步:词法分析,语法分析,语义分析。
而Json 字符串不存在不同上下文语义不同的情况,因此不需要进行语义分析。
两步走足够:
- 词法分析
- 语法分析
Json 格式概述
- 由键值对组成
- "键"一律为字符串
- "值"由多种类型,可简记为 NOABCD
- null
- Object
- Array
- Boolean
- Charactar
- Double
词法分析
一个完整的 Json 字符串是一个没有 key 的 Object
{
"data": {
"list": [
"Apple",
"Banana",
"Candy"
],
"payload": {
"size": 3
}
},
"code": {
"errno": 0,
"msg": "success",
"payload": {}
},
"cached": true
}
词法分析伪代码
c = nextChar()
if c is {
getObject()
if c is b
getBoolean()
if c is "
getString()
if c is n
getNull()
if c is [0-9] or -
getDouble()
if c is [
getArray()
如上,是一个递归匹配的过程
语法分析
语法分析就简单了,
parse() {
if head is {
parseObject()
}
if head is [
parseArray()
]
}
parseObject() {
Looping for parsing key-value pair
}