首页 > 解决方案 > 在 Python3.5+ 中序列化/反序列化对象 <->dict <-> JSON 的最简单和 Pythonic 方法

问题描述

我是 python 新手,我知道有很多答案,但大多数使用Python3__dict__不再存在的。

假设我有对象:

class A(object):
  def __init__(self, f1, f2):
    self.f1 = f1
    self.f2 = f2

现在 f2 是另一个对象:

class F2(object):
  def __init__(self, f21, f22):
    self.f21 = f21
    self.f22 = f22

所以A对象是复杂对象。最简单的方法是什么:

全部在 Python 3.5+ 中,并且可能没有额外的导入,因为我们的内部公司关系有限。

标签: serializationpython-3.6

解决方案


import pickle
import base64
import json


class A(object):
  def __init__(self, f1, f2):
    self.f1 = f1
    self.f2 = f2

a = pickle.dumps(A, 3)
j = base64.b64encode(a).decode('utf-8')
x = json.dumps([j])
print(a)
print(j)
print(x)
# output:
# b'\x80\x03c__main__\nA\nq\x00.'
# gANjX19tYWluX18KQQpxAC4=
# ["gANjX19tYWluX18KQQpxAC4="]

反序列化将是相反的;json.loads, string.encode base64.b64decode, pickle.loads.


推荐阅读