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

如何在Java中调用Google Distance Matrix API获取距离及解析问题求助

解决Google Distance Matrix API JSON数据的距离信息提取问题

嘿,我看到你在提取Google Distance Matrix API返回的距离数据时卡壳了,咱们先把这个JSON结构拆明白,再一步步写代码提取,肯定能搞定!

首先,先理清楚你拿到的这个JSON的层级结构:

  • 最外层是一个对象,包含rows数组(因为API支持多起点多终点,所以用数组包裹结果)
  • rows里的每一个元素是包含elements数组的对象,elements里的每个元素对应一组起点-终点的计算结果
  • 每个element对象里的distance字段就是你要的距离信息,里面有两个子字段:text(可读性强的字符串,比如"13.1 km")和value(精确数值,单位是米,比如13133)

常用语言的提取示例

Python 示例

假设你已经把API返回的字符串解析成了Python字典,直接逐层访问即可:

import json

# 替换成你实际获取到的JSON字符串
api_response = '''{ "destination_addresses" : [ "Some Address" ], "origin_addresses" : [ "Some other address" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "13.1 km", "value" : 13133 }, "duration" : { "text" : "33 mins", "value" : 1961 }, "status" : "OK" } ] } ], "status" : "OK" }'''

# 解析JSON为Python字典
data = json.loads(api_response)

# 提取距离信息(因为是单起点单终点,直接取数组第一个元素)
distance_text = data['rows'][0]['elements'][0]['distance']['text']
distance_value = data['rows'][0]['elements'][0]['distance']['value']

print(f"可读距离: {distance_text}")
print(f"精确距离(米): {distance_value}")

JavaScript 示例

如果是在前端或Node.js环境中,解析后用点语法直接访问:

// 假设这是API返回并解析后的对象
const apiData = { 
  "destination_addresses" : [ "Some Address" ], 
  "origin_addresses" : [ "Some other address" ], 
  "rows" : [ { "elements" : [ { "distance" : { "text" : "13.1 km", "value" : 13133 }, "duration" : { "text" : "33 mins", "value" : 1961 }, "status" : "OK" } ] } ], 
  "status" : "OK" 
};

// 提取距离信息
const distanceText = apiData.rows[0].elements[0].distance.text;
const distanceValue = apiData.rows[0].elements[0].distance.value;

console.log(`可读距离: ${distanceText}`);
console.log(`精确距离(米): ${distanceValue}`);

更健壮的写法(避免报错)

实际开发中,最好先检查状态和数组长度,防止因为API返回异常(比如无结果)导致代码崩溃:

Python 健壮版

import json

api_response = '''{ "destination_addresses" : [ "Some Address" ], "origin_addresses" : [ "Some other address" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "13.1 km", "value" : 13133 }, "duration" : { "text" : "33 mins", "value" : 1961 }, "status" : "OK" } ] } ], "status" : "OK" }'''

data = json.loads(api_response)

# 先检查整体请求状态
if data.get('status') == 'OK':
    # 检查rows数组是否有内容
    if data.get('rows') and len(data['rows']) > 0:
        row = data['rows'][0]
        # 检查elements数组是否有内容
        if row.get('elements') and len(row['elements']) > 0:
            element = row['elements'][0]
            # 检查当前起点终点的结果状态
            if element.get('status') == 'OK':
                distance_text = element['distance']['text']
                distance_value = element['distance']['value']
                print(f"可读距离: {distance_text}")
                print(f"精确距离(米): {distance_value}")
            else:
                print(f"该组起点终点查询失败: {element['status']}")
        else:
            print("未找到elements数据")
    else:
        print("未找到rows数据")
else:
    print(f"API请求失败: {data['status']}")

这样即使API返回异常,你的代码也不会直接报错,方便排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:36:26