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

如何从Bing Maps API返回的JSON中提取travelDistance和travelDuration

提取Bing Maps Distance Matrix API的旅行距离与时长

你可以通过逐层访问嵌套的字典和列表来获取目标字段,具体修改你的代码如下:

import requests
import json

payload = {
    "origins": [{"latitude": 50.781869, "longitude": 4.596188}],
    "destinations": [{"latitude": 50.87650130092019, "longitude": 4.671327819416231}],
    "travelMode": "driving",
}

paramtr = {"key": "mybingAPIkey"}

r = requests.post('https://dev.virtualearth.net/REST/v1/Routes/DistanceMatrix', data = json.dumps(payload), params = paramtr)

# 解析响应数据
response_data = r.json()

# 逐层访问嵌套结构
# 1. 取resourceSets列表的第一个元素
resource_set = response_data['resourceSets'][0]
# 2. 取resources列表的第一个元素
resource = resource_set['resources'][0]
# 3. 取results列表的第一个元素(对应你的单起点单终点)
result = resource['results'][0]

# 提取目标字段
travel_distance = result['travelDistance']
travel_duration = result['travelDuration']

print(f"旅行距离: {travel_distance} 公里")
print(f"旅行时长: {travel_duration} 分钟")

结构说明

你的API响应是嵌套的字典+列表结构,核心数据路径是:
response_data['resourceSets'][0]['resources'][0]['results'][0]

  • resourceSets:API返回的资源集合列表,这里只有1个集合
  • resources:集合里的资源列表,这里只有1个DistanceMatrix资源
  • results:起点到终点的结果列表,因为你是单起点单终点,所以只取索引0的条目,里面就包含travelDistance和travelDuration

如果需要处理多起点/多终点的情况,只需要遍历results列表即可,每个条目里的originIndex和destinationIndex对应你传入的起点、终点顺序。

可选:增加异常处理

为了避免因响应结构变化或请求失败导致报错,可以加入简单的异常判断:

if r.status_code == 200:
    response_data = r.json()
    if 'resourceSets' in response_data and len(response_data['resourceSets']) > 0:
        resource_set = response_data['resourceSets'][0]
        if 'resources' in resource_set and len(resource_set['resources']) > 0:
            resource = resource_set['resources'][0]
            if 'results' in resource and len(resource['results']) > 0:
                result = resource['results'][0]
                travel_distance = result.get('travelDistance', '未知')
                travel_duration = result.get('travelDuration', '未知')
                print(f"旅行距离: {travel_distance} 公里")
                print(f"旅行时长: {travel_duration} 分钟")
            else:
                print("未找到结果数据")
        else:
            print("未找到资源数据")
else:
    print(f"请求失败,状态码: {r.status_code}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:51:28