json使用dumps()函数进行序列化,返回的是字符串
import json
dict1 = dict(name='tom',age=20,grade=2)
json.dumps(dict1)
结果:
'{"grade": 2, "age": 20, "name": "tom"}'
使用load()或loads()进行反序列化,反序列化得到的字符串都默认是unicode
json_str = '{"grade": 2, "age": 20, "name": "tom"}'
json.loads(json_str)
结果:
{u'grade': 2, u'age': 20, u'name': u'tom'}
将一个类的实例化对象进行序列化,在对一个类的实例化对象进行序列化时不能像字符串那样直接进行序列化,需要借助转换函数进行序列化,dumps序列化参数参考地址:参数地址
#-*- coding:utf-8 -*-
import json
class student(object):
"""docstring for student"""
def __init__(self,name,age,grade):
self.name = name
self.age = age
self.grade = grade
def student_fun(stu):
return {
'name':stu.name,
'age':stu.age,
'grade':stu.grade
}
if __name__ == '__main__':
stu = student('test',23,'three')
print json.dumps(stu,default=student_fun)
先将类的实例化对象转换成dict然后再进行序列化
在进行反序列化的时候也是一样的道理,也需要一个转换函数
#-*- coding:utf-8 -*-
import json
class student(object):
"""docstring for student"""
def __init__(self,name,age,grade):
self.name = name
self.age = age
self.grade = grade
def student_json(stu):
return student(stu['name'],stu['age'],stu['grade'])
if __name__ == '__main__':
json_str = '{"age":20,"grade":"three","name":"er"}'
print (json.loads(json_str,object_hook=student_json))
先把序列化的字符串转换成字典,再将字典转换成类实例对象
pickle的序列化和反序列化
#-*- coding:utf-8 -*-
import pickle
def write_file(path):
fp = open(path,'wb')
pickle.dump('fdajdasuiwe',fp)
fp.close()
def read_file(path):
fp = open(path,'rb')
context = pickle.load(fp)
print context
fp.close()
if __name__ == '__main__':
write_file('C:\\Users\\Administrator\\Desktop\\testt\\e.txt')
read_file('C:\\Users\\Administrator\\Desktop\\testt\\e.txt')