最近在练习python,于是尝试使用python编写json解析器,目前已经大体实现,通过了jsonTestFile.txt中的测试例子。代码github网址为:https://github.com/siukwan/jsonparser

下面重点介绍编写过程中遇到的一些需要注意的问题。

1.json的主体内容

我这里所提及的json主体内容主要是指两大类:1.对象object;2.数组array。

因为一个json格式的字符串不是一个object就是一个array。所以编写jsonparser的类中,有_parse_object和_parse_array两个函数。首先通过parse函数直接判断开始的符号为{还是[进而决定调用_parse_object还是_parse_array。

2.json中的key

标准json格式中的key是string类型,使用双引号包括。其中类中的_parse_string函数专门用来解析key。

3.json中的value

json中的value相对复杂,类型可以是object,array,string,数字,true,false,null。

在编写过程中,我刚开始没有编写解析嵌套的object和array,先编写了_parse_number和_parse_string。我们在解析了key后,会遇到冒号:,然后跳过冒号,我们进一步判断非空字符,如果为”,则接下来是string,否则的话接下来是number。

number中需要注意的是,我们要判断是整型还是浮点数,需要进行一个int或float的强制转换。json中小数的表达方式有科学记数法和普通的小数点表示法,所以如果字符串中包含e、E和.则强制转换成float,其他转换成int。

完成上述解析后,我们开始考虑解析嵌套的object和array。如果遇到的字符为{则调用_parse_object函数,遇到[则调用_parse_array函数。我们把value解析统一封装到函数_parse_value中,如下:

def _parse_value(self):

'''

解析值,包括string,数字

'''

c = self._str[self._index]

#解析对象

if c == '{':

self._index+=1

self._skipBlank()

return self._parse_object()

#解析数组

elif c == '[':

#array

self._index+=1

self._skipBlank()

return self._parse_array()

#解析string

elif c == '"':

#string

self._index += 1

self._skipBlank()

return self._parse_string()

#解析null

elif c=='n' and self._str[self._index:self._index+4] == 'null':

#null

self._index+=4

return None

#解析bool变量true

elif c=='t' and self._str[self._index:self._index+4] == 'true':

#true

self._index+=4

return True

#解析bool变量false

elif c=='f' and self._str[self._index:self._index+5] == 'false':

#false

self._index+=5

return False

#剩下的情况为number

else:

return self._parse_number()

其中开始parse函数只会调用_parse_object或者_parse_array,而这两个函数中的value解析又有可能继续调用_parse_object或者_parse_array,从而实现了json对象或数组的嵌套解析。

4.避开空格

json字符串或者文件中,非key或非value的地方可能会存在换行,空格,缩进等,所以编写了_skipBlank函数,跳过这些空格。

5.记录当前解析的位置

使用了类成员_index来记录当前解析的位置,其中这个部分比较多细节,不是很难,具体请查看代码。

python自动解析json_JsonParser–使用python编写的json解析器相关推荐

  1. python自动测试s_用 Python 开启测试自动化的未来

    使用 Python 脚本迈进先进的测试自动化技术 传统上,测试自动化工程师都是使用 shell 脚本和自主开发的工具进行自动测试.现在,测试团队可以使用 Python 软件更轻松.更稳健地完成他们的测 ...

  2. python自动部署环境_selenium + python 部署自动化测试环境

    选择selenium和python其实是怀有私心的:码两行python,熟悉熟悉. selenium优点很多,我最看重的是支持多语言,足够简单,同时支持浏览器. 实际工作中,简单实用真的太重要了,谁都 ...

  3. python自动生成html_PyH : python生成html

    样例 下面是官网的一个例子: from pyh import * page = PyH('My wonderful PyH page') page.addCSS('myStylesheet1.css' ...

  4. python自动测试g_使用Python进行自动化测试

    目前大家对Python都有一个共识,就是他对测试非常有用,自动化测试里Python用途也很广,但是Python到底怎么进行自动化测试呢?今天就简单的向大家介绍一下怎么使用Python进行自动化测试,本 ...

  5. gson解析天气json_几种常用JSON解析库性能比较

    PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...

  6. python自动测试模型_Selenium+Python 自动化测试模型

    学习Selenium+Python,最终的目的是为了实现自动化测试的操作. 前面几篇文章,详细介绍了搭建环境.如何准确定位测试对象以及几个常用web 控件的脚本使用,基本可以实现关于网站的登录.注册等 ...

  7. python自动游戏脚本_[python游戏脚本]我想用Python写一个游戏脚本,自动点击排队!...

    我只是学会了Python,我用我的知识掌握和使用\u201Cautopy\u201D功能来编写一个脚本,该脚本自动点击鼠标队列,但是我希望这个脚本运行而不被显示在前面的窗口,即使是最小化.我在后台继续 ...

  8. python自动扫雷_利用Python实现自动扫雷

    自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 我的版本是 python 3.6.1 python的第三方库: w ...

  9. python自动配置文件_【python接口自动化】- ConfigParser配置文件的使用

    前言:目前我们使用的绝大多数计算机程序,无论是办公软件,浏览器,甚至游戏.视频都是通过菜单界面系统配置的,它几乎成了我们使用机器的默认方式.而在python中,也有这样的一个配置模块可以把代码可配置化 ...

最新文章

  1. 官宣!邢波出任全球首个AI大学校长,MBZUAI明年1月迎来首批新生
  2. linux查看出口IP
  3. settimeout需要清除吗_钢结构抛丸机可以清理结构件上的焊渣吗?
  4. linux系统中用户切换
  5. firefox自动化测试的常用插件
  6. xp系统打开计算机配置文件,浅析xp系统如何解决开机出现“Windows不能加载本地存储的配置文件“...
  7. 【UVA12304】2D Geometry 110 in 1!(外接圆/内切圆/切点等圆相关问题的模版题)
  8. cad工具箱详细讲解_AutoCAD学院派工具箱(XCAD)使用教程(图文解说)
  9. Matlab滤波器设计与滤波器特性分析(sptool、filterdesigner)
  10. 多线程+反爬:爬取阿里巴巴国际站物流表现数据到mysql
  11. 白帽黑客必备的15个技能点
  12. android高仿美团筛选控件,Android高仿美团首页分类按钮
  13. 虚幻引擎_矢量场初探
  14. 极限存在准则 两个重要极限
  15. 能提取HTML网页正文的网站,智能提取网页正文新方法
  16. uni-app转小程序ios video不生效+视频播放不了、黑屏问题
  17. 2021 icpc 沈阳 J-Luggage Lock
  18. Dubbo 的集群容错模式:Failover Cluster
  19. 知乎萧井陌大神《编程入门指南v1.3》思维导图
  20. 易语言取java路径模块_易语言API模块制作进程取程序路径

热门文章

  1. 纪中GMOJ语言模块题目1009
  2. 论文答辩问题准备(学生水平,自己准备用的,不喜勿喷)
  3. c# OutlookBar控件
  4. 43份ChatGTP报告分享
  5. 解决一个应用连接oracle端口1521不通问题
  6. note edge android 6.0 root,三星Note Edge 6.0 root N9150ZCU1CQH5 root 高级设置
  7. 大文件分块计算MD5值 C++实现
  8. boox android 4.4,纷极阅读app
  9. 霍兰德air适合学计算机吗,霍兰德职业兴趣测验(含职业代码)
  10. 烽火为格兰仕集团私人订制-销售管家iCube平台