如何从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
相关产品推荐
相关产品推荐

