在Python3.5 +中最简单和pythonic的方式来序列化/反序列化对象<-> dict <-> JSON

时间:2019-08-31 06:21:09

标签: serialization python-3.6

我是python的新手,我知道有很多答案,但是大多数使用{strong> 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对象是复杂对象。最简单的方法是:

  • A序列化为dict,然后序列化为json
  • 然后从json-> A
  • 反序列化

全部使用Python 3.5+和可能,而没有额外的导入,因为我们内部的公司联系有限。

1 个答案:

答案 0 :(得分:0)

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.loadsstring.encode base64.b64decodepickle.loads