FastAPI中移除嵌套JSON里的日期键值对问题求助
解决方法
核心思路很简单:把以日期为键的字典结构直接转换成数组,提取字典里的所有值即可。
1. 调整数据处理逻辑
假设你从PostgreSQL查询分组后得到的原始数据结构是这样的:
# 示例:当前分组后的数据 grouped_data = { "Pay_Dates": { "2022-11-04": {"Pay_Date": "2022-11-04", "Orders": [{"id": 1}, {"id": 2}]}, "2022-11-05": {"Pay_Date": "2022-11-05", "Orders": [{"id": 3}]} } }
只需要一行代码就能转换结构:
# 将字典的值转为数组,替换原Pay_Dates结构 formatted_data = { "Pay_Dates": list(grouped_data["Pay_Dates"].values()) }
2. 在FastAPI中返回处理后的数据
直接把处理好的formatted_data作为响应返回,FastAPI会自动转为符合要求的JSON:
from fastapi import FastAPI app = FastAPI() @app.get("/user-payments") async def get_user_payments(): # 这里替换成你从PostgreSQL查询、分组的实际逻辑 grouped_data = { "Pay_Dates": { "2022-11-04": {"Pay_Date": "2022-11-04", "Orders": [{"id": 1}, {"id": 2}]}, "2022-11-05": {"Pay_Date": "2022-11-05", "Orders": [{"id": 3}]} } } # 转换结构 formatted_data = {"Pay_Dates": list(grouped_data["Pay_Dates"].values())} return formatted_data
3. 输出对比
- 原输出:
{ "Pay_Dates": { "2022-11-04": { "Pay_Date": "2022-11-04", "Orders": [{"id": 1}, {"id": 2}] }, "2022-11-05": { "Pay_Date": "2022-11-05", "Orders": [{"id": 3}] } } }
- 修改后输出:
{ "Pay_Dates": [ { "Pay_Date": "2022-11-04", "Orders": [{"id": 1}, {"id": 2}] }, { "Pay_Date": "2022-11-05", "Orders": [{"id": 3}] } ] }
额外优化(可选)
如果需要保持日期的先后顺序,可以对转换后的数组排序:
formatted_data = { "Pay_Dates": sorted( grouped_data["Pay_Dates"].values(), key=lambda x: x["Pay_Date"] # 按Pay_Date字段升序排列 ) }
内容的提问来源于stack exchange,提问作者Supria Subburaj
相关产品推荐
相关产品推荐

