【发布时间】:2018-12-18 15:49:09
【问题描述】:
我搜索了 SO 的帖子,但找不到解决问题的方法。我看过一堆解释如何序列化 python 对象的 SO 帖子,但没有找到任何解释如何序列化 python 对象列表字典的内容。
这是问题陈述和示例用例:
import json
import collections
from collections import defaultdict
class A:
def __init__(self, a1_list=[], a2_str=None):
self.a1_list = []
self.a2_str = a2_str
class B:
def __init__(self, list_of_A_objects=[], b2_str=None):
self.list_of_A_objects = list_of_A_objects
self.b2_str = b2_str
if __name__ == "__main__":
a1 = A([1, 2, 3], '123')
a2 = A([4, 5, 6], '456')
b1 = B([a1, a2], '123-456')
a3 = A([11, 22, 33], '112233')
a4 = A([44, 55, 66], '445566')
b2 = B([a3, a4], '112233-445566')
dict_b = defaultdict(list)
dict_b['b'].append(b1)
dict_b['b'].append(b2)
json.dumps(dict_b)
在最后一行 json.dumps(dict_b) 抛出错误
TypeError:“B”类型的对象不是 JSON 可序列化的
编辑:
我已经尝试过@coldspeed 在 cmets 中建议的泡菜,但我会 喜欢用文本编辑器查看转储的 JSON。如果我用泡菜,我 无法查看,因为它是以二进制格式转储的。
我做错了什么吗?
【问题讨论】:
-
json不支持python对象,试试pickle? -
@coldspeed:感谢您的建议。你有任何示例吗?
-
@coldspeed:谢谢。显然,stackoverflow.com/questions/3768895/… 和 stackoverflow.com/questions/10252010/… 等一些 SO 帖子显示了如何使用
json将 python 对象序列化为 JSON 字符串。 -
我不熟悉 JSONEncoder,但我现在才记得曾经写过一个答案来做类似的事情:stackoverflow.com/a/45834618/4909087
标签: python json dictionary serialization defaultdict