python中的json_Python 标准库之 JSON

写在之前

大家好,这是首发在我公众号「Python空间」的第 73 篇文章,欢迎关注,期待和你的交流。

我用了两天的时间来介绍的 XML,如果没看的话建议先去看看。就数据传递而言, XML 是一种选择,当然这里还有另一种选择 -- 「JSON」。它是一种轻量级的数据交换格式,如果各位想要做 Web 编程的话,则肯定会用到它。下面我们就开始今天的学习。

JSON

首先我们参考《维基百科》中的相关内容,来对 JSON 做如下介绍:

JSON ( JavaScript Object Notation ) 是一种由道格拉斯构想设计、轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管 JSON 是 JavaScript 的一个子集,但 JSON 是独立于语言的文本格式,并且采用了类似 C 语言家族的一些习惯。

关于 JSON 更为详细的内容,可以参考其官方网站,在这我截取部分内容,让大家更好的了解一下 JSON 的结构。

JSON 构建于两种结构基础之上:

“名称/值”对的集合。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table)等。

值的有序列表。在某些语言中,它被理解为数组(array),类似于 Python 中的类表。

Python 标准库中有 JSON 模块,主要是执行序列化和反序列化功能。

序列化:encoding,把一个 Python 对象编码转化成 JSON 字符串;

反序列化:decoding,把 JSON 格式字符串解码转换为 Python 数据对象。

基本操作

JSON 模块相比于 XML 来说真的是简单多了:

>>> import json

>>> json.__all__

['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder']

1.encoding:dumps()

>>> data = [{'name':'rocky','like':('python','c++'),'age':23}]

>>> data

[{'name': 'rocky', 'like': ('python', 'c++'), 'age': 23}]

>>> data_json = json.dumps(data)

>>> data_json

'[{"name": "rocky", "like": ["python", "c++"], "age": 23}]'

encoding 的操作比较简单,请仔细观察一下上面代码中 data 和 data_json 的不同:like 的值从元组变成了列表,其实还有不同,请看下面:

>>> type(data)

>>> type(data_json)

2.decoding:loads()

decoding 的过程其实也像上面那么简单:

>>> new_data = json.loads(data_json)

>>> new_data

[{'name': 'rocky', 'like': ['python', 'c++'], 'age': 23}]

上面需要注意的是,解码之后并没有将值中的列表还原为数组。上面的 data 都不是很长,还能凑活着看,如何很长,阅读其实就很有难度了。所以 JSON 的 dumps() 提供了可选的参数,利用它们能在输入上对人更好,当然这个对机器来说都是无所谓的事情。

>>> data1 = json.dumps(data,sort_keys = True,indent = 2)

>>> print(data1)

[

{

"age": 23,

"like": [

"python",

"c++"

],

"name": "rocky"

}

]

sort_keys = True 的意思是按照键的字典顺序排序;indent = 2 则是让每个键值对显示的时候,以缩进两个字符对齐,这样的视觉效果就好多了。

大 JSON 字符串

其实如果数据不是很大的话,上面的那些基本操作就足够了。但现在不是都讲究什么都是「大数据」嘛,很多人都在吹嘘自己是大数据,显然不能让 JSON 总是很小。

事实上对于真正的大数据,再大的 JSON 也不够,前面的操作方法是将数据都读入内存,如果数据太大的话就会溢出。那么这个时候该怎么办呢?别怕,我们是 Python 啊,早都想到了,Python 中提供了一个 tempfile 的模块解决此类问题。这里需要注意的是,跟上面已经用过的函数相比是不同的,请仔细观察。

>>> import tempfile

>>> data = [{'name':'rocky','like':('python','c++'),'age':23}]

>>> f = tempfile.NamedTemporaryFile(mode = 'w+')

>>> json.dump(data,f)

>>> f.flush()

>>> print(open(f.name,'r').read())

[{"name": "rocky", "like": ["python", "c++"], "age": 23}]

写在之后

差不多 JSON 就是这些内容了,是不是比起 XML 真的少了很多,也简单了很多?但是简单归简单,内容还是不能小觑的,上面的代码例子什么的,该看看,该在交互模式自己敲一敲就敲一敲,切勿眼高手低。

如果你觉得本篇文章对你有帮助的话,欢迎点赞,如果你有什么问题的话,欢迎在后台或者加微信联系我。

The end。e48fd18d1d7c71570a56fd6ad958253f3c5ccf40.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值