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

Python中json.dumps/bson.json_util.dumps缩进失效问题求助

问题解决:MongoDB查询结果JSON格式化无效的问题

问题根源

你的代码存在两个核心错误:

  1. 错误处理MongoDB游标:flightCollection.find({})返回的是MongoDB游标对象,并非直接的文档数据。你用str(data)将游标转为字符串后传给json.dumps,此时JSON序列化的是游标本身的字符串表示,而非实际的文档内容,因此indent参数无法对内部JSON结构生效。
  2. 未处理MongoDB特殊类型:文档中的ObjectId是MongoDB特有类型,标准json模块无法序列化,必须使用bson.json_util工具处理。

解决方案

修正步骤:

  • 将游标转换为包含所有文档的Python列表:list(flightCollection.find({}))
  • 使用bson.json_util.dumps进行序列化,指定indent参数实现格式化,同时自动处理ObjectId等特殊类型。

修正后的代码

from bson import json_util

def loadDatabase():
    try:
        client.admin.command('ping')
        # 将游标转为文档列表
        data = list(flightCollection.find({}))
        # 用bson工具序列化并格式化输出
        output = json_util.dumps(data, indent=4)
        return output
    except Exception as e:
        return "DATABASE ERROR: <br>"+str(e)

def loadFlights(): 
    response = amadeus.shopping.flight_offers_search.get(
        originLocationCode='MAD',
        destinationLocationCode='ATH',
        departureDate=str(date.today()),
        adults=1)
    return response.data

效果说明

修正后,json_util.dumps会将文档列表正确序列化为带缩进的JSON字符串,同时将ObjectId转换为JSON规范格式(如{"$oid": "6481bb02cbb598c58691b45e"}),既保证可读性,又符合JSON标准。

内容的提问来源于stack exchange,提问作者Ari B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:37:01