Python Pickle 和 JSON 序列化

內置 Pickle 序列化

序列化保存到文件:json

>>> import pickle
>>> d = dict(name='Bob', age=20, score=88)
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'

>>> f = open('dump.txt', 'wb')
>>> pickle.dump(d, f)
>>> f.close()

反序列化:code

>>> f = open('dump.txt', 'rb')
>>> d = pickle.load(f)
>>> f.close()
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}
注:不一樣版本的Python序列化的內容可能不兼容,建議用Pickle序列化只保存不重要的數據

JSON 序列化

JSON類型 Python類型
{} dict
[] list
"string" str
1234.56 int或float
true/false True/False
null None

序列化保存到文件:對象

>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d)
'{"age": 20, "score": 88, "name": "Bob"}'

>>> f = open('dump.txt', 'wb')
>>> json.dump(d, f)
>>> f.close()

序列化不轉義中文字符:ci

obj = dict(name='小明', age=20)
s = json.dumps(obj, ensure_ascii=False)

反序列化:string

>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> d = json.loads(json_str)
>>> d
{'age': 20, 'score': 88, 'name': 'Bob'}

序列化類對象:it

import json

class Student(object):
    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score


s = Student('Bob', 20, 88)
print(json.dumps(s, default=lambda obj: obj.__dict__))

反序列化類對象:table

def dict2student(d):
    return Student(d['name'], d['age'], d['score'])

json_str = '{"age": 20, "score": 88, "name": "Bob"}'
print(json.loads(json_str, object_hook=dict2student))
相關文章
相關標籤/搜索