我对动态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();
}
我应该怎么做才能获取这些数据?
答案 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
的原因。
请通过调试进行检查。我想您会找到解决方案的。