然后,我有一个函数loadDatabase,它完全更新数据库,然后将其作为JSON返回(稍后打印到屏幕上)
问题是它以一种可读性不强的格式打印它,这通常是一个容易解决的问题,使用json.dumps()或bson.jsonutil.dumps()函数可以接受缩进参数。但是,我两种都试过了,似乎都没有效果。
在我的相关代码中,我已经注解掉了我认为对此不重要的行:
def loadDatabase():
try:
client.admin.command('ping')
#logger.info("Successfully connected to MongoDB")
#print("Database - You successfully connected to MongoDB!")
#flightCollection.delete_many({})
#flightCollection.insert_many(loadFlights())
data = flightCollection.find({})
output = json.dumps(str(data), indent=4)
return output
except Exception as e:
#print(e)
#logger.setLevel(logging.ERROR)
#logger.error(e)
#logger.setLevel(logging.INFO)
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,但相反,它都聚集在一起,例如:"{'_id': ObjectId('6481bb02cbb598c58691b45e'), 'type': 'flight-offer', 'id': '2', 'source': 'GDS', 'instantTicketingRequired': False, 'nonHomogeneous': False, 'oneWay': False, 'lastTicketingDate': '2023-06-08', 'lastTicketingDateTime': '2023-06-08', 'numberOfBookableSeats': 3, 'itineraries': [{'duration': 'PT12H5M', 'segments': [{'departure': {'iataCode': 'MAD', 'terminal': '4S', 'at': '2023-06-08T22:10:00'}, 'arrival': {'iataCode': 'TLV', 'terminal': '3', 'at': '2023-06-09T03:45:00'}, 'carrierCode': 'IZ', 'number': '232', 'aircraft': {'code': '73H'}, 'operating': {'carrierCode': 'QS'}, 'duration': 'PT4H35M', 'id': '3', 'numberOfStops': 0, 'blacklistedInEU': False}, {'departure': {'iataCode': 'TLV', 'terminal': '1', 'at': '2023-06-09T09:05:00'}, 'arrival': {'iataCode': 'ATH', 'at': '2023-06-09T11:15:00'}, 'carrierCode': 'IZ', 'number': '211', 'aircraft': {'code': '73H'}, 'operating': {'carrierCode': 'QS'}, 'duration': 'PT2H10M', 'id': '4', 'numberOfStops': 0, 'blacklistedInEU': False}]}], 'price': {'currency': 'EUR', 'total': '147.32', 'base': '112.00', 'fees': [{'amount': '0.00', 'type': 'SUPPLIER'}, {'amount': '0.00', 'type': 'TICKETING'}], 'grandTotal': '147.32', 'additionalServices': [{'amount': '37.33', 'type': 'CHECKED_BAGS'}]}, 'pricingOptions': {'fareType': ['PUBLISHED'], 'includedCheckedBagsOnly': False}, 'validatingAirlineCodes': ['IZ'], 'travelerPricings': [{'travelerId': '1', 'fareOption': 'STANDARD', 'travelerType': 'ADULT', 'price': {'currency': 'EUR', 'total': '147.32', 'base': '112.00'}, 'fareDetailsBySegment': [{'segmentId': '3', 'cabin': 'ECONOMY', 'fareBasis': 'XSIP', 'class': 'X', 'includedCheckedBags': {'quantity': 0}}, {'segmentId': '4', 'cabin': 'ECONOMY', 'fareBasis': 'XSIP', 'class': 'X', 'includedCheckedBags': {'quantity': 0}}]}]}"
我已经尝试了json.dumps()或bson.jsonutil.dumps()函数,使用了各种缩进,以各种不同的方式应用,以及转换为字符串、列表和其他几种修改和变体
1条答案
按热度按时间cfh9epnr1#
代码的问题在于,您正在将从MongoDB检索到的数据转换为字符串,然后尝试在该字符串上使用
json.dumps()
。这不会像您所期望的那样工作,因为json.dumps()
需要字典、列表或其他JSON可序列化对象,而不是字符串。注意,我使用了
bson.json_util
而不是json.dumps
的转储,因为它能够序列化ObjectId
示例,这些示例通常用作MongoDB中的文档ID。标准的json.dumps
函数不理解如何序列化这些示例。阅读更多here