序列化,指的是把内存中的变量(如类的实例)变成可存储或可传输的过程。
JSON(JavaScript Object Notation, JavaScript对象表示)是网络传输中经常使用的一种数据形式。
在Python中,经常将字典转化成JSON来发送,使用的主要方法为dumps:
import json data = {'name':'nick', 'age':12} data_json = json.dumps(data)
注意以下几点:
1.data_json为转换后的JavaScript对象,在JavaScript对象里,key值默认为字符串格式
2.data_json中的key的顺序与data中的顺序不保证相同
3.data还可以是str,list,tuple,int等其他类型,这时也会对data进行相应的转化
4.data_json的数据类型为str
将JSON格式的数据转化为Python中的dict时,应使用loads:
data = json.loads(data_json)
这时,data中所有的字符串默认均为unicode,因为JSON标准规定的编码为UTF-8
注意:对于文件的JSON处理,应使用dump,load
要想JSON化类的实例,应在dumps中指定可选参数default,如:
def func(obj):
def foo(obj): return {'name':obj.name, 'age':obj.age}
此后使用 data_json = json.dumps(s, default = foo) 即可序列化类的实例s
更简便的方法是:
json.dumps(s, default = lambda x: x.__dict__)
要得到JSON反序列化的类的实例,可使用loads的object_hook参数:
def bar(obj): return Person(obj['name'], d['age'])
c = json.loads(data_json, object_hook = bar)
此时得到的c为Person类的一个实例