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

火山引擎 最新活动