Python中json.dumps/bson.json_util.dumps缩进失效问题求助
问题解决:MongoDB查询结果JSON格式化无效的问题
问题根源
你的代码存在两个核心错误:
- 错误处理MongoDB游标:
flightCollection.find({})返回的是MongoDB游标对象,并非直接的文档数据。你用str(data)将游标转为字符串后传给json.dumps,此时JSON序列化的是游标本身的字符串表示,而非实际的文档内容,因此indent参数无法对内部JSON结构生效。 - 未处理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
相关产品推荐
相关产品推荐

