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

如何在FastAPI中返回排序后的JSON数据?返回排序字典响应未排序

问题:按值排序的字典在FastAPI响应中未保持排序

环境版本

  • Python:3.8.10
  • FastAPI:0.95.2

接口代码

@classifier_router.post("/groupClassifier")
async def group_classifier(
    # current_user: User = Depends(get_current_user),
    group_id: str = Query(default="1069302375", description=GROUP_ID_DESC),
    starttime: Union[datetime , None] = DEFAULT_START_TIME,
    endtime: Union[datetime , None] = DEFAULT_END_TIME):
    result = handler.group_classifier(
        [group_id],
        starttime,
        endtime)
    if result==None:
        raise HTTPException(
        status_code=500
        )
    else:
        return result

Swagger返回结果

{
  "class_scores": {
    "1": 34.8,
    "2": 22.1,
    "3": 16.9,
    "4": 7.8,
    "5": 26,
    "6": 23.6
  }
}

解决方法

方法1:转为键值对列表(推荐)

JSON标准中对象是无序的,即便后端返回有序字典,前端解析时也可能打乱顺序。最可靠的方式是将排序后的字典转为键值对列表:

修改返回前的处理逻辑,把class_scores的字典转换为按值排序的列表:

# 假设result是{"class_scores": 已按值排序的字典}
sorted_items = sorted(result["class_scores"].items(), key=lambda x: x[1], reverse=True)
result["class_scores"] = [{"class_id": k, "score": v} for k, v in sorted_items]

修改后返回的JSON结构:

{
  "class_scores": [
    {"class_id": "1", "score": 34.8},
    {"class_id": "5", "score": 26},
    {"class_id": "6", "score": 23.6},
    {"class_id": "2", "score": 22.1},
    {"class_id": "3", "score": 16.9},
    {"class_id": "4", "score": 7.8}
  ]
}

方法2:配置FastAPI保留字典顺序

如果必须返回字典格式,可以自定义响应类强制保留序列化顺序:

from fastapi import Response
import json

class OrderedResponse(Response):
    media_type = "application/json"

    def render(self, content: any) -> bytes:
        return json.dumps(
            content,
            ensure_ascii=False,
            sort_keys=False,
            indent=2
        ).encode("utf-8")

然后在路由中指定响应类:

@classifier_router.post("/groupClassifier", response_class=OrderedResponse)
async def group_classifier(...):
    # 原有逻辑不变

注意:这种方法依赖JSON解析工具的实现,部分前端库可能仍不保证顺序,因此方法1兼容性更好。

内容的提问来源于stack exchange,提问作者Mostafa Najmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:37:35