python自动解析json_JsonParser–使用python编写的json解析器
最近在练习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解析器相关推荐
- python自动测试s_用 Python 开启测试自动化的未来
使用 Python 脚本迈进先进的测试自动化技术 传统上,测试自动化工程师都是使用 shell 脚本和自主开发的工具进行自动测试.现在,测试团队可以使用 Python 软件更轻松.更稳健地完成他们的测 ...
- python自动部署环境_selenium + python 部署自动化测试环境
选择selenium和python其实是怀有私心的:码两行python,熟悉熟悉. selenium优点很多,我最看重的是支持多语言,足够简单,同时支持浏览器. 实际工作中,简单实用真的太重要了,谁都 ...
- python自动生成html_PyH : python生成html
样例 下面是官网的一个例子: from pyh import * page = PyH('My wonderful PyH page') page.addCSS('myStylesheet1.css' ...
- python自动测试g_使用Python进行自动化测试
目前大家对Python都有一个共识,就是他对测试非常有用,自动化测试里Python用途也很广,但是Python到底怎么进行自动化测试呢?今天就简单的向大家介绍一下怎么使用Python进行自动化测试,本 ...
- gson解析天气json_几种常用JSON解析库性能比较
PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...
- python自动测试模型_Selenium+Python 自动化测试模型
学习Selenium+Python,最终的目的是为了实现自动化测试的操作. 前面几篇文章,详细介绍了搭建环境.如何准确定位测试对象以及几个常用web 控件的脚本使用,基本可以实现关于网站的登录.注册等 ...
- python自动游戏脚本_[python游戏脚本]我想用Python写一个游戏脚本,自动点击排队!...
我只是学会了Python,我用我的知识掌握和使用\u201Cautopy\u201D功能来编写一个脚本,该脚本自动点击鼠标队列,但是我希望这个脚本运行而不被显示在前面的窗口,即使是最小化.我在后台继续 ...
- python自动扫雷_利用Python实现自动扫雷
自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 我的版本是 python 3.6.1 python的第三方库: w ...
- python自动配置文件_【python接口自动化】- ConfigParser配置文件的使用
前言:目前我们使用的绝大多数计算机程序,无论是办公软件,浏览器,甚至游戏.视频都是通过菜单界面系统配置的,它几乎成了我们使用机器的默认方式.而在python中,也有这样的一个配置模块可以把代码可配置化 ...
最新文章
- 官宣!邢波出任全球首个AI大学校长,MBZUAI明年1月迎来首批新生
- linux查看出口IP
- settimeout需要清除吗_钢结构抛丸机可以清理结构件上的焊渣吗?
- linux系统中用户切换
- firefox自动化测试的常用插件
- xp系统打开计算机配置文件,浅析xp系统如何解决开机出现“Windows不能加载本地存储的配置文件“...
- 【UVA12304】2D Geometry 110 in 1!(外接圆/内切圆/切点等圆相关问题的模版题)
- cad工具箱详细讲解_AutoCAD学院派工具箱(XCAD)使用教程(图文解说)
- Matlab滤波器设计与滤波器特性分析(sptool、filterdesigner)
- 多线程+反爬:爬取阿里巴巴国际站物流表现数据到mysql
- 白帽黑客必备的15个技能点
- android高仿美团筛选控件,Android高仿美团首页分类按钮
- 虚幻引擎_矢量场初探
- 极限存在准则 两个重要极限
- 能提取HTML网页正文的网站,智能提取网页正文新方法
- uni-app转小程序ios video不生效+视频播放不了、黑屏问题
- 2021 icpc 沈阳 J-Luggage Lock
- Dubbo 的集群容错模式:Failover Cluster
- 知乎萧井陌大神《编程入门指南v1.3》思维导图
- 易语言取java路径模块_易语言API模块制作进程取程序路径
热门文章
- 纪中GMOJ语言模块题目1009
- 论文答辩问题准备(学生水平,自己准备用的,不喜勿喷)
- c# OutlookBar控件
- 43份ChatGTP报告分享
- 解决一个应用连接oracle端口1521不通问题
- note edge android 6.0 root,三星Note Edge 6.0 root N9150ZCU1CQH5 root 高级设置
- 大文件分块计算MD5值 C++实现
- boox android 4.4,纷极阅读app
- 霍兰德air适合学计算机吗,霍兰德职业兴趣测验(含职业代码)
- 烽火为格兰仕集团私人订制-销售管家iCube平台