如何对难对象使用JSON

时间:2019-05-26 11:00:59

标签: java json api

我对动态JSON数据有疑问。我不知道如何将其放入我的JAVA课堂。我需要“路线”数据。但是我不知道该怎么用这个“” 2019-05-27“:{...”。

它是JSON文件的一部分...

{
  "2019-05-26": {
    "lastUpdate": "2019-05-26 06:05:02",
    "routes": [
      {
        "routeId": 107,
        "agencyId": 18
      },
      {
        "routeId": 222,
        "agencyId": 22
      }
    ]
  },
  "2019-05-27": {
    "lastUpdate": "2019-05-27 06:05:02",
    "routes": [
      {
        "routeId": 33,
        "agencyId": 14
      },
      {
        "routeId": 345,
        "agencyId": 2232
      }
    ]
  }
}

下面的代码不起作用。不是Map<String,Map<String, String>>。我认为是-

Gson gson = new Gson();

    Type mapType = new TypeToken<Map<String,Map<String, String>>>() {}.getType();
    Map<String,Map<String, String>> map = null;
    try {
        map = gson.fromJson(new FileReader("routes.json"), mapType);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

我应该怎么做才能获取这些数据?

2 个答案:

答案 0 :(得分:2)

创建像这样的POJO类:

public class MyObject {
    private List<Route> routes;
    private String lastUpdate;

    public MyObject(List<Route> routes, String lastUpdate) {
        this.routes = routes;
        this.lastUpdate = lastUpdate;
    }

    // assume getters and setters
}

public class Route {
    private String routeId;
    private String agencyId;

    public Route(String routeId, String agencyId) {
        this.routeId = routeId;
        this.agencyId = agencyId;
    }
    // assume getters and setters
}

进行测试:

public static void main(String[] args) throws IOException {
        Gson gson = new Gson();

        String json = Files.lines(Paths.get("src/main/resources/data.json")).collect(Collectors.joining());

        Type mapType = new TypeToken<Map<String, MyObject>>() {}.getType();
        Map<String, MyObject> map = gson.fromJson(json, mapType);

        map.forEach((s, myObject) -> System.out.println(s + " " + myObject.getLastUpdate()));

}

输出为:

2019-05-26 2019-05-26 06:05:02
2019-05-27 2019-05-27 06:05:02

您只需要创建一个以日期为键,自定义对象为值的地图。

答案 1 :(得分:0)

请检查以下行:

json = Files.lines(Paths.get("routes.json")).collect(Collectors.joining());

此行可能存储空值,这就是为什么您得到java.lang.NullPointerException的原因。

请通过调试进行检查。我想您会找到解决方案的。