【发布时间】:2020-06-10 19:14:38
【问题描述】:
我的代码使用Fast API:
class EnumTestT(Enum):
test_t_value = 0
object = {
test: test_t_value
}
enum_mapping = {
test_t_value: "Test"
}
def enum_encoder(val: EnumTestT) -> str:
return enum_mapping[val]
custom_encoder = {
EnumTestT: enum_encoder
}
@app.get("/test")
async def test_get():
return jsonable_encoder(object, custom_encoder=custom_encoder)
问题在于jsonable_encoder 在默认值之后应用了自定义编码器。有什么方法可以在默认编码器之前应用它们。因为对于Enum 和任何派生类,报告的是枚举值而不是映射值。
【问题讨论】:
-
@lsabi 不确定我是否理解这个问题。
-
我的意思是如果您需要链接中显示的东西。您可以返回您自己准备的响应,并且不会通过 jsonable_encoder
-
@lsabi 我有一个字典,我在代码中简单地表示了它。对象比较复杂,需要编码。因此,要么我自己编写一个完全自定义的编码器,我想避免或使用
jsonable_encoder,但我似乎无法做的一件事是为枚举提供助记符而不是数值。 -
是的,但是如果您尝试使用 json.dumps(my_object) 序列化您的对象,它会返回所需的结果吗?如果您可以直接返回该结果,而不是通过 fastapi 的 jsonable_encoder