Python 为什么不是';t json.dumps()是否使用自定义类json serialiser?

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

我有一个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.name}

    ...  
如果创建此类的实例:
new\u principal=principal(“p\u 1”,“Ted”)
并调用
json.dumps(new\u principal)
转储函数的预期行为是使用my classes
default()
以返回可以转换为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()
时,它解析的很好,输出的似乎很好。