Python 为什么不是';t json.dumps()是否使用自定义类json serialiser?
我有一个Python3类,定义如下:Python 为什么不是';t json.dumps()是否使用自定义类json serialiser?,python,json,Python,Json,我有一个Python3类,定义如下: class Principal: def __init__(self, id, name): self.id = id self.name = name def default(self, o): print("default called") return {"id":self.id, "princpal":self
class Principal:
def __init__(self, id, name):
self.id = id
self.name = name
def default(self, o):
print("default called")
return {"id":self.id, "princpal":self.name}
...
如果创建此类的实例:
new\u principal=principal(“p\u 1”,“Ted”)
并调用json.dumps(new\u principal)
转储函数的预期行为是使用my classesdefault()
以返回可以转换为json的dict
但是,这不会发生,它不会尝试调用我的类default()
,因此会返回一个错误,即该类不可序列化
文档声明在子类中实现此方法,以便它为``o``返回一个可序列化的对象,或调用基本实现(以引发``TypeError`)。
我相信我已经这样做了,但它似乎没有调用类defult()
为什么会发生这种情况?如果我使用json.dumps(new\u principal,principal(new\u principal))
指定默认值,那么它将成功解析
我不明白为什么我的函数没有被调用。因为这根本不是
json.dump
的工作方式。您引用的关于default
的一段话是为了对JSON序列化程序进行子类化,而您没有这样做
如果您只是在使用json.dump
,则需要向它传递一个default=…
函数,以执行正确的操作,例如
class Principal:
def __init__(self, id, name):
self.id = id
self.name = name
def to_json(self):
return {"id": self.id, "princpal": self.name}
def default_dumper(o):
if hasattr(o, "to_json"):
return o.to_json()
raise TypeError(f"Unable to JSONify {o}")
# ...
data = json.dumps(new_principal, default=default_dumper)
啊,这是我的误解,我明白我错在哪里了。但是现在我遇到了一个问题,json.dumps()是从我正在使用的库中调用的,这意味着我没有办法将default=default\u转储程序传递给转储程序-有没有办法,或者我必须编辑库才能使用我的转储程序?那是什么库?它是用于创建可视化图形的库。如果是此段:它已经支持
to_json()
函数…它是。当我在对象图上运行get\u network\u data()
时,它解析的很好,输出的似乎很好。