serialization - 在 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
对象是复杂对象。最简单的方法是什么:
- 序列化
A
todict
和 than tojson
。 - 然后从
json
->反序列化它A
全部在 Python 3.5+ 中,并且可能没有额外的导入,因为我们的内部公司关系有限。
解决方案
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
.
推荐阅读
- google-bigquery - Google Data Studio 数据凭据问题
- r - 除了索引之外,如何在 PostgreSQL 中加快对 100m 行的查询?
- jquery - 从jQuery中的父元素内部获取前(n)个元素
- angular - 从子组件自动重定向到父组件
- angular - 类错误地实现了接口“OnInit”。“组件”类型中缺少属性“ngOnInit”,但在“OnInit”类型中是必需的
- python - Windows10:无法打开 Anaconda 导航器或 Spyder
- python - 基于多列转置数据框
- visual-studio-code - 在 VS Code 中使用组进行搜索和替换
- html - 数据仅在角度刷新后显示
- karate - Chrome.robot 是否支持并行运行