import json, pickle
# 序列化:将一个对象转换成为二进制或者字符串序列的过程
# 反序列化:将一个字符串或者二进制转换成为一个对象的过程
# json: dump/dumps 序列化 load/loads 反序列化
# pickle: dump/dumps laod/loads
names = ['zhangsan', 'lisi', 'wangwu', 'jerry']
x = json.dumps(names)
print(x) # '["zhangsan", "lisi", "wangwu", "jerry"]'
print(x.upper()) # 只能调用字符串相关的方法
y = json.loads(x)
print(y)
print(y.append('merry')) # 只能调用列表相关的方法
print(y)
class MyEncoder(json.JSONEncoder):
def default(self, o):
print('default 方法被调用了, o = {}'.format(o))
return o.__dict__
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print(self.name + '正在吃东西')
p = Person('zhangsan', 18)
# x = json.dumps(p) # Object of type Person is not JSON serializable
# 指定cls参数,参数是一个类对象
# 这个类需要继承自 json.JSONEncoder,并重写 default 方法
# json.dumps 的结果,就是将 MyEncoder 的 default 方法的返回值进行JSON序列化
# json.dumps(p.__dict__)
y = json.dumps(p, cls=MyEncoder)
print(y) # y 是一个字符串 '{"name": "zhangsan", "age": 18}'
z = json.loads(y)
print(type(z)) # <class dict>
# z.eat() 字典类型没有eat方法
# pickle的dumps方法用来将一个对象转换成为二进制
a = pickle.dumps(p)
b = pickle.loads(a)
print(type(b)) # <class '__main__.Person'>
b.eat()
【python基础】对象的序列化
最新推荐文章于 2024-09-03 22:16:48 发布