0

我正在尝试编写 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 响应的每个点返回的数据类型之外,是否有更优雅的方法来解决这些问题?

谢谢!

4

0 回答 0