Python 覆盖FastAPI中JSU编码器的默认编码器
我有这样的代码,使用:Python 覆盖FastAPI中JSU编码器的默认编码器,python,fastapi,Python,Fastapi,我有这样的代码,使用: 问题是,jsu编码器在默认值之后应用自定义编码器。有没有办法在默认编码器之前应用它们。因为对于Enum和任何派生类,都会报告Enum的值而不是映射值。现在我在json.dumps中使用自定义编码器,如下所示: class TestEncoder(JSONEncoder): def default(self, obj): if isinstance(obj, EnumTestT): return TestEncoder.pro
问题是,
jsu编码器
在默认值之后应用自定义编码器。有没有办法在默认编码器之前应用它们。因为对于Enum
和任何派生类,都会报告Enum的值而不是映射值。现在我在json.dumps中使用自定义编码器,如下所示:
class TestEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, EnumTestT):
return TestEncoder.process_enum_test_t(obj)
FastAPI应用程序中的响应是:
json_str = json.dumps(json_list, cls=TestEncoder).encode('utf-8')
return Response(media_type="application/json", content=json_str)
使用自定义编码器的FastAPI的问题在于,在调用所有标准编码器之后,会调用自定义编码器,并且无法覆盖该顺序。你的意思是什么?@lsabi不确定我是否理解这个问题。我的意思是如果你需要链接中所示的内容。您可以返回一个您自己准备的响应,而不需要通过JSO_encoder@lsabi我有一个dict,我在代码中简单地表示了它。对象更复杂,需要进行编码。因此,我要么自己编写一个完全定制的编码器,我想避免使用它,要么使用jsonable_encoder
,但我似乎不能做的一件事是为枚举提供一个助记符而不是一个数值。是的,但是如果你试图用json.dumps(我的_对象)序列化你的对象,它会返回期望的结果吗?在这种情况下,您可以直接返回该结果,而不是通过fastapi的JSU编码器
json_str = json.dumps(json_list, cls=TestEncoder).encode('utf-8')
return Response(media_type="application/json", content=json_str)