我正在使用一个包含这样的嵌套对象的 JSON 文件,
{
"LocId":99,
"typeId":99,
"name":"foo",
"parentId":99,
"geoCode":
{
"type":"bang",
"coordinates":
[{
"latitude":99.0,
"longitude":99.0
}]
}
}
我创建了一个容器来在这样的类中保存 JSON 文件,
public class Location_JSON {
private LocId id;
// +getter+setter
@Override
public String toString() {
return id.toString();
}
public static class LocId {
private Long locId;
private Long typeId;
private String name;
private Long parentId;
private GeoCode geoCode;
// +getters+setters
@Override
public String toString() {
return "{\"locId\":" + locId
+ ", \"typeId\":" + typeId
+ ", \"name\":" + name
+ ", \"geoCode\":" + geoCode.toString() + "}";
}
}
public static class GeoCode {
private String type;
private Coordinates coordinates;
// +getter+setter
@Override
public String toString() {
//return "{\"type\":" + type + "}";
return "{\"type\":" + type
+ ", \"coordinates\":" + coordinates.toString() + "}";
}
}
public static class Coordinates {
private Double latitude;
private Double longitude;
// +getter+setter
@Override
public String toString() {
return "[{\"latitude\":" + latitude
+ ", \"longitude\":" + longitude + "}]";
}
}
}
为了测试一切是否正常,我在 JSON 对象中读取了这样的字符串,
String str = "the JSON string shown above";
InputStream is = new ByteArrayInputStream(str.getBytes());
BufferedReader br = new BufferedReader(new InputStreamReader(is));
Location_JSON locations = new Gson().fromJson(br, Location_JSON.class);
System.out.println(locations.toString());
这会产生 NullPointerException!
我实现了这篇 SO 帖子中的两个解串器解决方案, Get nested JSON object with GSON using retrofit但它仍然产生了相同的空错误。
根据这篇 SO 帖子, Java - Gson parsing nested within nested我所拥有的应该很接近。
我在没有嵌套对象的情况下测试了我的代码,即,我从字符串和 Location_JSON 容器中删除了嵌套对象,并且一切正常。所以我相信这是一个 JSON 嵌套对象问题。
更新:
如果您正在查看这篇文章,我只想指出,我接受了 Chengpohi 的回答,因为它解决了我最初的问题,并且 Chengpohi 是第一个提供答案的人。然而,我确实有第二个问题,直到这个问题解决后我才发现。 Sachin Gupta 为我的第二个问题提供了一个可行的解决方案。如果您正在使用这篇文章,请查看下面的两个答案。谢谢。
最佳答案
Location_JSON locations = new Gson().fromJson(br, Location_JSON.class);
应该是:
LocId locations = new Gson().fromJson(br, LocId.class);
您收到 NullPointerException
,因为您的 LocId
尚未初始化。您的 JSON 是 LocId
的对象。
和你的 JSON:
"coordinates":
[{
"latitude":99.0,
"longitude":99.0
}]
应该是:
"coordinates":
{
"latitude":99.0,
"longitude":99.0
}
关于java - JSON 嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30722362/