我正在尝试迭代谷歌距离矩阵响应。我想用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中做到这一点。
谢谢,
答案 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");
还有其他方法可以做到这一点,但我个人认为这是最好的方法! 希望它有所帮助。