Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java gson解析来自google matrix api的嵌套json对象_Java_Json_Gson - Fatal编程技术网

Java gson解析来自google matrix api的嵌套json对象

Java gson解析来自google matrix api的嵌套json对象,java,json,gson,Java,Json,Gson,我想做这样的事情,但是使用这个JSON响应: { "status": "OK", "origin_addresses": [ "Vancouver, BC, Canada", "Seattle, État de Washington, États-Unis" ], "destination_addresses": [ "San Francisco, Californie, États-Unis", "Victoria, BC, Canada" ], "rows": [ {

我想做这样的事情,但是使用这个JSON响应:

{
  "status": "OK",
  "origin_addresses": [ "Vancouver, BC, Canada", "Seattle, État de Washington, États-Unis" ],
  "destination_addresses": [ "San Francisco, Californie, États-Unis", "Victoria, BC, Canada" ],
  "rows": [ {
    "elements": [ {
      "status": "OK",
      "duration": {
        "value": 340110,
        "text": "3 jours 22 heures"
      },
      "distance": {
        "value": 1734542,
        "text": "1 735 km"
      }
    }, {
      "status": "OK",
      "duration": {
        "value": 24487,
        "text": "6 heures 48 minutes"
      },
      "distance": {
        "value": 129324,
        "text": "129 km"
      }
    } ]
  }, {
    "elements": [ {
      "status": "OK",
      "duration": {
        "value": 288834,
        "text": "3 jours 8 heures"
      },
      "distance": {
        "value": 1489604,
        "text": "1 490 km"
      }
    }, {
      "status": "OK",
      "duration": {
        "value": 14388,
        "text": "4 heures 0 minutes"
      },
      "distance": {
        "value": 135822,
        "text": "136 km"
      }
    } ]
  } ]
}
我的课程是:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;

class Response {
    private String status;
    private String[] destination_addresses;
    private String[] origin_addresses;
    private Elements[] rows;

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String[] getDestination_addresses() {
        return destination_addresses;
    }

    public void setDestination_addresses(String[] destination_addresses) {
        this.destination_addresses = destination_addresses;
    }

    public String[] getOrigin_addresses() {
        return origin_addresses;
    }

    public void setOrigin_addresses(String[] origin_addresses) {
        this.origin_addresses = origin_addresses;
    }

    public Elements[] getRows() {
        return rows;
    }

    public void setRows(Elements[] rows) {
        this.rows = rows;
    }
}

class Distance {
    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;
    }
}

class Duration {
    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;
    }
}

class Elements {
    Duration duration[];
    Distance distance[];
    String status;
}

public class JSON {
    public static void main(String[] args) throws IOException {
        JsonReader reader = new JsonReader(new BufferedReader(new FileReader(
                "json.json")));
        reader.setLenient(true);
        Response r = (new Gson().fromJson(reader, Response.class));
        StringBuilder sb = new StringBuilder();
        for (String s : r.getDestination_addresses()) {
            sb.append(s);
        }
        System.out.println("getDestination_addresses: " + sb.toString());
        StringBuilder sb1 = new StringBuilder();
        for (String s : r.getOrigin_addresses()) {
            sb1.append(s);
        }
        System.out.println("getOrigin_addresses: " + sb1.toString());
        System.out.println("getStatus(): " + r.getStatus());
        System.out.println("Rows length " + r.getRows().length);
        System.out.println(r.getRows()[0].status);   // here i get null
    }
}
但它不能完全工作,我只能正确获取以下字段:

private String status;
private String[] destination_addresses;
private String[] origin_addresses;

are信息为空。

您的声明错误。将
响应
更改为

class Response {
    private String status;
    private String[] destination_addresses;
    private String[] origin_addresses;
    private Item[] rows;
    ...
}
其中,
为:

 class Item {
    private Element[] elements;
    ...
 }
 class Element{
    Duration duration;
    Distance distance;
    String status;
    ...
 }
元素
是:

 class Item {
    private Element[] elements;
    ...
 }
 class Element{
    Duration duration;
    Distance distance;
    String status;
    ...
 }
这应该可以解决问题。还有三个提示:

  • 我们正处于完全泛型时代,所以避免使用元素[],而是使用列表(以此类推,无论如何,我在答案中保留了您的“风格”)
  • 使用类似于可视化JSON的东西,它将帮助您理解其结构
  • Duration
    Distance
    具有相同的结构,也许您可以保存一个声明,Gson不关心类的名称,它查看它的结构。从Gson的角度来看,持续时间和距离是相同的:一个字符串加一个整数

  • 你的声明是错误的。将
    响应
    更改为

    class Response {
        private String status;
        private String[] destination_addresses;
        private String[] origin_addresses;
        private Item[] rows;
        ...
    }
    
    其中,
    为:

     class Item {
        private Element[] elements;
        ...
     }
    
     class Element{
        Duration duration;
        Distance distance;
        String status;
        ...
     }
    
    元素
    是:

     class Item {
        private Element[] elements;
        ...
     }
    
     class Element{
        Duration duration;
        Distance distance;
        String status;
        ...
     }
    
    这应该可以解决问题。还有三个提示:

  • 我们正处于完全泛型时代,所以避免使用元素[],而是使用列表(以此类推,无论如何,我在答案中保留了您的“风格”)
  • 使用类似于可视化JSON的东西,它将帮助您理解其结构
  • Duration
    Distance
    具有相同的结构,也许您可以保存一个声明,Gson不关心类的名称,它查看它的结构。从Gson的角度来看,持续时间和距离是相同的:一个字符串加一个整数

  • 你试过我的解决方案吗?你试过我的解决方案吗?