在java中迭代google map distance matrix response api

时间:2016-12-11 09:10:35

标签: java google-maps

我正在尝试迭代谷歌距离矩阵响应。我想用java获取距离值(kms)。我刚接触java。

{
           "destination_addresses" : [
              "Service Rd, Muneswara Nagar, Sector 6, Koramangala, Bengaluru, Karnataka 560034, India"
           ],
           "origin_addresses" : [
              "1, 16th Main Rd, BTM 2nd Stage, Kuvempu Nagar, Stage 2, BTM 2nd Stage, Bengaluru, Karnataka 560029, India"
           ],
           "rows" : [
              {
                 "elements" : [
                    {
                       "distance" : {
                          "text" : "4.0 km",
                          "value" : 4035
                       },
                       "duration" : {
                          "text" : "18 mins",
                          "value" : 1060
                       },
                       "status" : "OK"
                    }
                 ]
              }
           ],
           "status" : "OK"
}

从上面的回复我想得到'distance.text'值。我如何在java中做到这一点。

谢谢,

2 个答案:

答案 0 :(得分:1)

由于问题非常通用,我打算以同样的方式回答。有多种不同的方法可以实现这一目标。 Google距离矩阵允许您在xml和JSON响应之间进行选择。如果是xml响应,您可以使用JAXB将xml转换为类,如果它是JSON,您可以使用JACKSON来执行此操作。在此之后,您必须从该特定类中的该值读取所有内容。

答案 1 :(得分:1)

有几种不同的方法可以做到这一点。我首选的方法是创建一个“模型化”json响应的Model类。这将通过以下方式完成。

public class GoogleDistanceMatrixApiResponse {

List<Rows> rows;
private List<String> destination_addresses;
private List<String> origin_addresses;

public List<String> getDestination_addresses() {
    return destination_addresses;
}

public List<String> getOrigin_addresses() {
    return origin_addresses;
}

public List<Rows> getRows() {
    return rows;
}

static class Rows {
    List<Element> elements;

    public List<Element> getElements() {
        return elements;
    }
}


class Element {

    Distance distance;
    Duration duration;

    public Distance getDistance() {
        return distance;
    }

    public Duration getDuration() {
        return duration;
    }
}

class Distance {
    String text;
    String value;

    public String getText() {
        return text;
    }

    public String getValue() {
        return value;
    }
}

class Duration {
    String text;
    String value;

    public String getText() {
        return text;
    }

    public String getValue() {
        return value;
    }

 }

然后,您可以通过将模型类传递给GSON来简单地反序列化响应。然后,这将为您完成所有艰苦的工作。 (您需要将GSON依赖项或jar导入到项目中)

然后您只需编写以下行: (json变量是json响应)

    GoogleDistanceMatrixApiResponse response = gson.fromJson(json, 
 GoogleDistanceMatrixApiResponse.class);

然后你可以通过以下方式获得距离:

        String distance = 
response.getRows().get(0).getElements().get(0).getDistance().getText( 
).replace("mi", "miles");

还有其他方法可以做到这一点,但我个人认为这是最好的方法! 希望它有所帮助。