为了账号安全,请及时绑定邮箱和手机立即绑定

解析 JSON 语法的思路

解析 JSON 语法的思路

海绵宝宝撒 2019-03-30 11:35:13
本人想学习解析JSON字符串的思路,而非使用现成类库。但是现成类库都有点儿大,不想去读其源代码。所以在这里请教大神给指点指点。越详细越好,谢谢!!!
查看完整描述

2 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

就以你在评论里面的{"Name":"aaa:bbb"}为例:
一开始解析到{状态变为开始解析对象
-解析到"状态变为开始解析键名
--后面的Name四个字符都当做键名
-又解析到"状态变为键名解析完毕,等待:
-解析到:状态变为已经有:了
-解析到"状态变为值是String,等待字符串
--后面的aaa:bbb都当作字符串来处理,虽然里面有:,但是当前的状态是值是String,等待字符串所以会把它当作值保留下来
-解析到"状态变为当前键值对完毕
解析到}状态变为JSON对象解析完毕
这种是通过状态机转移的方式来做的解析,不同状态间定义了严谨的转移条件就不会混乱(比如你举例字符串中的:不会被识别为键值之间的分隔符),大部分语法分析都是通过这种方式来完成的,全手写的话需要严格定义各个状态以及转移条件,挺费力的,尤其还得考虑嵌套转意等等。
                            
查看完整回答
反对 回复 2019-03-30
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

广告:isayme/tJson,400行代码!
其实就是按照json格式解析,读每个字符前你都对其有个期望值,不是的话就是json格式有问题.
比如你评论里说的{"Name":"aaa:bbb"},当你遇到字符a前面的"时,就一直读后面的字符,直到遇到新的"字符,所以中间遇到的:字符其实会被当做字符串的一部分处理.
当然你可以多做一点,比如如果字符串值中包含转义字符(\")什么的~
                            
查看完整回答
反对 回复 2019-03-30
  • 2 回答
  • 0 关注
  • 401 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信