概念:
序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON,XML等。反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。
JSON(Java Script Object Notation):一种轻量级数据交互格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集。
python2.6版本开始加入了JSON模块,python的json模块序列化与反序列化的过程分别是encoding和decoding。
- encoding:把一个python对象编码转换成Json字符串。
- decoding:把json格式字符串编码转换成python对象。
具体应用:
json提供四个功能:dumps, dump, loads, load
1 # dumps功能
2 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串
3 >>> import json
4 >>> data = ['aa', 'bb', 'cc']
5 >>> j_str = json.dumps(data)
6 >>> j_str
7 '["aa", "bb", "cc"]'
1 # loads功能
2 # 将json编码的字符串再转换为python的数据结构
3 >>> j_str
4 '["aa", "bb", "cc"]'
5 >>> mes = json.loads(j_str)
6 >>> mes
7 ['aa', 'bb', 'cc']
1 # dump功能
2 # 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
3 with open('D:/tmp.json', 'w') as f:
4 json.dump(data, f)
1 # load功能
2 # 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构
3 with open('D:/tmp.json', 'r') as f:
4 data = json.load(f)
说明:
json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict.
对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。
json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],因为其他语言没有元组的概念,只有数组,也就是列表。
1 >>> import json
2 >>> data = {'a':True, 'b':False, 'c':None, 'd':(1,2), 1:'abc'}
3 >>> j_str = json.dumps(data)
4 >>> j_str
5 '{"a": true, "c": null, "d": [1, 2], "b": false, "1": "abc"}'
===========================================================================
{
"people":[
{
"firstName": "Brett",
"lastName":"McLaughlin"
},
{
"firstName":"Jason",
"lastName":"Hunter"
}
]
}
json简介
- json是一种轻量级的数据交换格式
- 完全独立于编程语言的文本格式来存储和表示数据
- 简单和清晰的层次结构使得json成为理想的数据交换语言。易于阅读和编写,易于机器解析和生成,并有效地提升网络传输效率
- json相比于xml来讲,数据体积小,传输速度快,格式都是压缩的
- json格式语法上与创建JavaScript对象的代码相同,由于这种相似性,JavaScript程序可以轻松地将json数据转换为JaveScript对象
json方法
- load
- loads
- dump
- dumps
示例
#coding = utf-8
import requests
import json
response = requests.get("http://httpbin.org/get")
print(response.json())
strtext = json.loads(response.text)
print (type(strtext))
for key,value in strtext.items():
print (key,value)
print (strtext["url"])
{'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate
onnection': 'close', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/
4'}, 'origin': '111.175.40.89', 'url': 'http://httpbin.org/get'}
<class 'dict'>
args {}
headers {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection':
se', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.18.4'}
origin 111.175.40.89
url http://httpbin.org/get
http://httpbin.org/get
浙公网安备 33010602011771号