我正在尝试编写 API 调用以使用 UPS Tracking API 检索最后一个包裹状态。但是,API 返回的 JSON 字符串似乎在返回的数据类型上有所不同 - 例如,["TrackResponse"]["Shipment"]["Package"]返回 JSON 字符串或 JSON 字符串列表。
我目前正在使用下面的 try / except 语句来管理这些。如果返回 JSON 列表而不是单个 JSON 字符串,我指定我正在查找列表中的第一个 JSON 字符串。
response = requests.request("POST", url, data=payload, headers=headers)
response_json=response.json()
try:
status = response_json["TrackResponse"]["Shipment"]["Package"]["Activity"][0]["Status"]["Type"]
code = response_json["TrackResponse"]["Shipment"]["Package"]["Activity"][0]["Status"]["Code"]
location = response_json["TrackResponse"]["Shipment"]["Package"]["Activity"][0]["ActivityLocation"]["Address"]["City"]
except:
status = response_json["TrackResponse"]["Shipment"]["Package"][0]["Activity"][0]["Status"]["Type"]
code = response_json["TrackResponse"]["Shipment"]["Package"][0]["Activity"][0]["Status"]["Code"]
location = response_json["TrackResponse"]["Shipment"]["Package"][0]["Activity"][0]["ActivityLocation"]["Address"]["City"]
不幸的是,这似乎无法正常工作,因为 API 响应的多个部分都在发生此问题。例如,如果只找到一个活动,“活动”也会返回一个 JSON,如果返回多个活动,则返回一个 JSON 列表。
除了编写多个嵌套的 if/else 或 try/except 语句来测试在 JSON 响应的每个点返回的数据类型之外,是否有更优雅的方法来解决这些问题?
谢谢!