繁体   English   中英

解析从Google Distance Matrix API发送的Json响应

Parsing Json Response sent from Google Distance Matrix API

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

当目的地或起点不在英国之外时,会出现此json,因此不会给我任何结果! 我需要检查是否为空检查,这样我就不会收到空指针异常

JSON结果:

{
"destination_addresses" : [ "Durham, NC, USA" ],
"origin_addresses" : [ "Lancashire, UK" ],
"rows" : [
  {
     "elements" : [
        {
           "status" : "ZERO_RESULTS"
        }
     ]
  }
],

“状态”:“确定”}

码:

public static void extractJsonFromRequest(GoogleResponsePojo response) {
    String destinationAddress = 
    response.getDestination_addresses().get(0);
    String timeTaken = 
response.getRows().get(0).getElements().get(0).getDuration().getText();
    String originAddress = response.getOrigin_addresses().get(0);

    System.out.println("It will take ** "+  timeTaken + " ** to walk 
from " + originAddress + " to " + destinationAddress);
}

Google Reponse POJO是json的结构:

public class GoogleResponsePojo {

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

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

public void setDestination_addresses(List<String> destination_addresses) {
    this.destination_addresses = destination_addresses;
}

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

public void setOrigin_addresses(List<String> origin_addresses) {
    this.origin_addresses = origin_addresses;
}

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

public void setRows(List<Rows> rows) {
    this.rows = rows;
}
}

class Rows {
private List<Element> elements;

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

public void setElements(List<Element> elements) {
    this.elements = elements;
}
}

class Element {
private TextValue distance;
private TextValue duration;

public TextValue getDistance() {
    return distance;
}

public void setDistance(TextValue distance) {
    this.distance = distance;
}

public TextValue getDuration() {
    return duration;
}

public void setDuration(TextValue duration) {
    this.duration = duration;
}
}

class TextValue {
private String text;
private  String value;

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

public String getValue() {
    return value;
}

public void setValue(String value) {
    this.value = value;
}
}

我本质上只需要解析下面的json,以便我可以说(如果status!= ZERO_RESULTS)保存响应,否则抛出异常! 可能很简单,但我很挣扎! 非常感谢!

1 个回复

将GoogleResponsePojo更改为:

 public class GoogleResponsePojo {

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

    public void setDestination_addresses(List<String> destination_addresses) {
        this.destination_addresses = destination_addresses;
    }

    public void setOrigin_addresses(List<String> origin_addresses) {
        this.origin_addresses = origin_addresses;
    }

    public void setRows(List<Rows> rows) {
        this.rows = rows;
    }

    //getters
}


private static class Rows{
    private List<Element> elements;

    public void setElements(List<Element> elements) {
        this.elements = elements;
    }

    //getters
}

private static class Element{
    private TextValue distance;
    private TextValue duration;

    public void setDistance(TextValue distance) {
        this.distance = distance;
    }

    public void setDuration(TextValue duration) {
        this.duration = duration;
    }

    //getters
}

private static class TextValue{
    private String text;
    private  String value;

    public void setText(String text) {
        this.text = text;
    }

    public void setValue(String value) {
        this.value = value;
    }

    //getters
}

您可以按照以下方式进行duration

GoogleResponsePojo name = gson.fromJson(response.toString(),GoogleResponsePojo.class);

name.getRows().get(0).getDuration().getText();

我建议使用基于apache http api构建的http-request 使用简单:

 public static final String BASE_URL = "https://maps.googleapis.com/maps/api/distancematrix/json";

private static final HttpRequest<GoogleResponsePojo> HTTP_REQUEST =
        HttpRequestBuilder.createGet(BASE_URL, GoogleResponsePojo.class)
                .addDefaultRequestParameter("origins", "Seattle")
                .addDefaultRequestParameter("destinations", "San+Francisco")
                .addDefaultRequestParameter("key", "***")
                .build();

@GET
@Produces(MediaType.APPLICATION_JSON)
public static void updateTestExecutionDetails() throws IOException {

    ResponseHandler<GoogleResponsePojo> responseHandler = HTTP_REQUEST.execute();

    GoogleResponsePojo name = responseHandler.orElseThrow(); // throws ResponseException when status code != 200

    System.out.println(name.getDestination_addresses().get(0));
    System.out.println(name.getRows().get(0).getElements().get(0).getDuration().getText());
    System.out.println(name.getOrigin_addresses().get(0));
}
1 如何从以json发送的Google登录API中读取响应

我目前正在使用Google Login API。 我完成了登录的第一步,现在我有api发送的Google代码。 现在,我需要用户的ID或电子邮件,但无法获取。 根据谷歌文档说 Google将通过返回一个JSON对象(包含短期访问令牌和刷新令牌)来响应您的POST请求。 在 ...

5 doInBackground执行错误-Distance-Matrix-API和Places API

MainActivity.java 我正在创建一个应用程序,接受用户输入的位置和目的地,并向他们返回路径之间的距离以及预计的出租车费 。 该程序中还具有利用Google-Places API的自动完成文本查看功能。 此应用程序使用的是Direction-Matrix-API ,其中我 ...

6 JSON解析Google翻译API

我正在尝试解析Google翻译的数据。 在viewdidload中,我编写了以下代码。 我将代码与不同的源进行了比较,并且我的API也已激活,但是结果字符串什么也没得到。 它的账单。 为什么? ...

9 解析来自 api 的 Json 响应

我有这个要求 我应该得到这个回应 我想解析它以获得“sha”值。 我尝试了我能找到的一切,所以我无法向你展示我尝试过的东西。 我希望有人能够帮助我,ty。 ...

2020-09-05 16:49:00 1 64   c#/ json
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM