首页 > 解析 JSON 语法的思路

解析 JSON 语法的思路

本人想学习解析 JSON 字符串的思路,而非使用现成类库。但是现成类库都有点儿大,不想去读其源代码。所以在这里请教大神给指点指点。
越详细越好,谢谢!!!


广告: isayme/tJson , 400行代码!

其实就是按照json格式解析, 读每个字符前你都对其有个期望值, 不是的话就是json格式有问题.

比如你评论里说的{"Name":"aaa:bbb"}, 当你遇到字符a前面的"时, 就一直读后面的字符, 直到遇到新的"字符, 所以中间遇到的:字符其实会被当做字符串的一部分处理.

当然你可以多做一点, 比如如果字符串值中包含转义字符(\")什么的~


就以你在评论里面的{"Name":"aaa:bbb"}为例:

一开始解析到{状态变为开始解析对象
-解析到"状态变为开始解析键名
--后面的Name四个字符都当做键名
-又解析到"状态变为键名解析完毕,等待:
-解析到:状态变为已经有:了
-解析到"状态变为值是String,等待字符串
--后面的aaa:bbb都当作字符串来处理,虽然里面有:,但是当前的状态是值是String,等待字符串所以会把它当作值保留下来
-解析到"状态变为当前键值对完毕
解析到}状态变为JSON对象解析完毕

这种是通过状态机转移的方式来做的解析,不同状态间定义了严谨的转移条件就不会混乱(比如你举例字符串中的:不会被识别为键值之间的分隔符),大部分语法分析都是通过这种方式来完成的,全手写的话需要严格定义各个状态以及转移条件,挺费力的,尤其还得考虑嵌套转意等等。

【热门文章】
【热门文章】