简介:
在数据传递方面,XML是一种选择,还有一种选择是JSON,它是一种轻量级的数据交换格式。
在json的编码过程中,会存在从python原始类型向json类型的转化过程,具体的转化对照如下:
python标准库中有JSON模块,主要执行序列化和反序列化的功能:
- 序列化 dumps() :encoding,把一个python队形编码转化成JSON字符串,JSON字符串是字符串
- 反序列化 loads() :decoding,把JSON格式字符串解码转换为python数据对象,即为字典对象
注意 :JSON在python中分别由list和dict组成。
dumps()
dumps函数的功能:转换为字符串的格式
语法格式:
dumps(data, sort_keys = True, indent = 2)
其中,sort_keys = True 意思是按照键的字典顺序排序,indent = 2是让每个键/值对显示的时候,以缩进两个字符对齐
例子:
>>> import json
>>> data = [{"name":"xiaoxu","lang":("python","english"),"age":40}]
>>> data_json = json.dumps(data)
>>> print data_json
[{"lang": ["python", "english"], "age": 40, "name": "xiaoxu"}]
>>>
>>>
>>> data_j = json.dumps(data,sort_keys = True,indent =2)
>>> print data_j
[
{
"age": 40,
"lang": [
"python",
"english"
],
"name": "xiaoxu"
}
]
>>>
注意:观察data和data_json有两点不同
- lang的值从元组变成了列表。
- 看如下结果
>>> print data_json
[{"lang": ["python", "english"], "age": 40, "name": "xiaoxu"}]
>>> type(data_json)
<type 'str'>
>>> type(data)
<type 'list'>
>>>
loads()
loads 函数的功能:转换为字典的格式
>>> import json
>>>
>>> print data_json
[{"lang": ["python", "english"], "age": 40, "name": "xiaoxu"}] #接上个代码的结果输出
>>>
>>> new_data = json.loads(data_json)
>>> print new_data
[{u'lang': [u'python', u'english'], u'age': 40, u'name': u'xiaoxu'}]
>>>
注意:解码之后并没有将元组还原
若数据量太大,数据都读入内存,内存会爆满,可以通过一个 tempfile 模块来解决。
关于 tempfile 模块的应用:
若你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFile函数创建临时文件是最好的选择。其他的应用程序是无法找到或打开这个文件的,因为它并没有引用文件系统表。用这个函数创建的临时文件,关闭后会自动删除。
例:
>>> import tempfile
>>> data
[{'lang': ('python', 'english'), 'age': 40, 'name': 'xiaoxu'}]
>>>
>>> f = tempfile.NamedTemporaryFile(mode = 'w+')
>>> json.dump(data,f)
>>> f.flush()
>>> print open(f.name,"r").read()
[{"lang": ["python", "english"], "age": 40, "name": "xiaoxu"}]
文件的读写
如果要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。
# Writing JSON data
with open('data.json', 'w') as f:
json.dump(data, f)
# Reading data back
with open('data.json', 'r') as f:
data = json.load(f)
参考链接:http://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html