Json 解析思路简析

Feb 21, 2018

Json 字符串和 HTML 语法非常像,是一种解释型语言(暂且称之为语言)。
之所以称之为语言,是因为我们可以以解析编程语言的方式解析 Json 字符串。

编程语言解析无非三步:词法分析,语法分析,语义分析。

而Json 字符串不存在不同上下文语义不同的情况,因此不需要进行语义分析。
两步走足够:

  1. 词法分析
  2. 语法分析

Json 格式概述

  1. 由键值对组成
  2. "键"一律为字符串
  3. "值"由多种类型,可简记为 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
}
/* 看板娘 */