You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:47:12