自定义JSON编码器无法使用嵌套模型



我正在尝试为嵌套Pydantic模型创建一个自定义JSON编码。我将问题简化为以下示例:

from pydantic import BaseModel

class SubModel(BaseModel):
name: str
short_name: str

class TestModel(BaseModel):
sub_model: SubModel
class Config:
json_encoders = {SubModel: lambda s: s.short_name}

model = TestModel(sub_model=SubModel(name="Sub Model", short_name="SM"))
print(model)
print(model.json())

我期待最后一行输出:

{"sub_model": "SM"}

但相反,我得到的输出就好像我从未定义过自己的json_encoders:

{"sub_model": {"name": "Sub Model", "short_name": "SM"}}

如何为另一个Pydantic模型正确定义JSON编码器?

您指定的json_encoder没有任何问题。您只需要将models_as_dict=False添加到json()方法中,就可以覆盖默认的dict-like序列化:

print(model.json(models_as_dict=False))

请参阅https://pydantic-docs.helpmanual.io/usage/exporting_models/#serialising-自参考或用于参考的其他模型。

我遇到了同样的问题。对我有用的是在全局BaseConfig而不是类上设置JSON编码器


from pydantic import BaseConfig
BaseConfig.json_encoders = {
MyClass: lambda v: v.as_str(),
}

参考:https://github.com/pydantic/pydantic/issues/2277#issuecomment-764010272

最新更新