带字节的快速 API JSON 响应

Nic*_*ick 5 python byte json mongodb fastapi

我正在使用 FAST API 来检索包含一些字节的 mongo 文档。结构如下

item = 
{"namd" : "xyz",
 "value1: b'\x89PNG\r\n\sla\..."
...
 "some_other_byte: b'\x89PNG\r\n\sla\..."  
}
Run Code Online (Sandbox Code Playgroud)

使用fast API中的post请求返回上述数据,它尝试将其转换为json,但无法自动执行此操作。

所以我尝试了这个:

json_compatible_item_data = jsonable_encoder(item)
Run Code Online (Sandbox Code Playgroud)

但后来我得到这个错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte
Run Code Online (Sandbox Code Playgroud)

有没有办法自动将上面的 dict 转换为 json,以便可以在 REST API 中返回它?最好的方法是什么?

ale*_*ame 6

通过 FastAPI,jsonable_encoder您可以使用自定义编码器。bytes将任意对象转换为 base64 的示例str

json_compatible_item_data = jsonable_encoder(item, custom_encoder={
        bytes: lambda v: base64.b64encode(v).decode('utf-8')})
Run Code Online (Sandbox Code Playgroud)

在客户端解码目标字段可以这样完成:

value1 = base64.b64decode(response_dict["value1"])
Run Code Online (Sandbox Code Playgroud)