使用Python解析Json数据

学python一直没有用到json库文件,闲下来了,,就研究下怎么解析json数据

一、json.dumps

这个函数主要是用于将数组、列表等格式的数据解析为json格式

这里一个数组里我添加了两个List,格式为name、age、sex,用来模拟真实的用户数据

运行结果如上所示,几乎没什么变化,下面我们使用参数来使这个输入更加格式化

①sort_keys

由于dict存储的无序特性,造成两者无法比较。因此两者可以通过排序后的结果进行存储就避免了数据比较不一致的情况发生,但是排序后再进行存储,系统必定要多做一些事情,也一定会因此造成一定的性能消耗,所以适当排序是很重要的。

②indent

输出的数据被格式化之后,变得可读性更强,但是却是通过增加一些冗余的空白格来进行填充的。json主要是作为一种数据通信的格式存在的,而网络通信是很在乎数据的大小的,无用的空格会占据很多通信带宽,所以适当时候也要对数据进行压缩。

③separator

该参数可以起到这样的作用,该参数传递是一个元组,包含分割对象的字符串。

图片[1]-使用Python解析Json数据-安全小百科

在使用上述参数进行格式化后,输出的确美观了许多~

二、json.loads

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。

该功能可能会更常用一些,在爬取网站数据时,往往是json格式,因此我们需要使用该函数来对数据进行处理。

这是最简单的一个json数据格式,经过loads处理后,解码json数据

当然实际情况肯定不会像这个这么简单,下面来构造一些复杂的数据,来实现我们的一些爬取目的

这里json的解码其实和列表的读取有点类似,我们现在想要读取第一个a里的内容

所以json的解码还算比较人性化,下面用一个实例来模拟日常需要

先看一个简单的豆瓣的图书查询的api返回

http://api.douban.com/v2/book/isbn/9787218087351

可以获得这段json数据

首先第一个问题,这是一长段json数据,那么我们如何使用json的dumps或者loads来对数据进行格式化输出

这里选择json.dumps来对json进行格式化输出,loads主要是对json数据进行解码,因此这里可以选择dumps其中的参数来进行格式化

第二个问题,由于这段数据中包含双引号等字符串,在进行json.dumps的时候在会出现这样的转移字符

 

图片[2]-使用Python解析Json数据-安全小百科

这就导致了在进行格式化时会出现异常,因此首先我们需要使用replace函数去除转移字符,再对json数据进行dumps

但是最后一个问题来了,中文编码的问题

图片[3]-使用Python解析Json数据-安全小百科

可以看到中文字符已经变成了unicode编码样式,这无疑大大增加了我们的可阅读性,其实编码问题可能是编程里的一大难题,,还好json库自带了参数来解决这样的问题,这里由于python版本是2.7,因此选择使用ensure_ascii这个参数来解码中文

图片[4]-使用Python解析Json数据-安全小百科

如果是3版本的,则可以使用__future__函数,这里没有做尝试,读者可以自行尝试!

在解决中文编码的问题后,我们在json.dumps()参数里加上这个ensure_ascii

最终代码如下:

当然这里也可以写个requests函数来爬取网页的某些数据api,,这里就省去了。。

最终效果如下:

图片[5]-使用Python解析Json数据-安全小百科

那么开始对数据进行搜寻

最后说下为啥使用loads和dumps,而不是用load和dump,这里json.dump和json.load函数主要是对文件进行操作,假如我们现在爬取json数据,然后将数据导入文件,那么我们就可以使用json.dump(f)这样来对文件进行操作,load亦是如此~

上述如有不当之处,敬请指出~

相关推荐: YIT-CTF(三) 密码学&PWN wp

题目链接:传送门 密码学不多,就三条,作为一个信息安全学生,密码学什么的最简单了~ 1.哼哼 小猪生活的地方在哪里? ★tip:yitctf{内容为小写} 小猪,联想到猪圈密码,百度详解地址:传送门 根据字符对应可知flag为HACK 2.卢本伟 LOL我只服…

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论