0

我似乎无法使用 GSON 从 JSON 创建 POJO(计划旧 Java 对象)。我按照本教程学习了 T 但我仍然得到一个空对象。这是我的代码:

JSONHandler.java

public class JSONHandler 
{
    private Gson gson; 
    private InputStream is; 
    private Reader reader;
    private TripList tripList; 
    public JSONHandler(InputStream is)
    {
        this.is = is;

        gson = new Gson(); 
        reader = new InputStreamReader(is);
        tripList = gson.fromJson(reader, TripList.class);
    }
    public Gson getGson() {
        return gson;
    }
    public void setGson(Gson gson) {
        this.gson = gson;
    }

TripList.java

public class TripList 
{
    @SerializedName("Line")
    public String line;

    @SerializedName("CurrentTime")
    public int currentTime; 

    public List<Train> Trips; 

}

火车.java

public class Train 
{
    @SerializedName("TripID")
    public String tripID; 

    @SerializedName("Destination")
    public String dest; 


    public List<Prediction> Predictions; 

}

预测.java

public class Prediction 
{
    @SerializedName("StopID")
    public int stopID;

    @SerializedName("Stop")
    public String stop;

    @SerializedName("Seconds")
    public int seconds;
}

蓝色.json

{
    "TripList":
   {
        "CurrentTime":1342032950,
        "Line":"Red",
        "Trips": [
             {
                  "TripID":"R982ECC1E",
                  "Destination":"Alewife",
                  "Predictions": [
                          {"StopID":"70094","Stop":"Ashmont","Seconds":370}
                   ]
             },
             {
                  "TripID":"R982ECC78",
                  "Destination":"Ashmont",
                  "Note":"Big Red",
                  "Position":
             {"Timestamp":1342032834,"Train":"1809","Lat":42.38725,"Long":-71.11894,"Heading":185},
                "Predictions": [
                        {"StopID":"70067","Stop":"Harvard Square","Seconds":36},
                        {"StopID":"70069","Stop":"Central Square","Seconds":260}
                  ]
               }
           ]
     }
}

JSON 格式将遵循范例。当无法正确解析某些内容时,GSON 不会抛出错误,它只是返回一个令人讨厌的空值。格式或我处理 java 数据对象的方式有问题吗?任何帮助将非常感激

4

4 回答 4

0

有一个小问题:您正在读取一个包含 TripList 的对象:

{
   "TripList": ...
}

但是您告诉 Gson 您正在阅读 TripList 本身:

tripList = gson.fromJson(reader, TripList.class);

由于TripList不包含名为 的属性TripList,因此它会执行以下操作:未知属性(即“TripList”)被忽略,而缺少的属性(即“TripList”的所有成员都保留为默认值。

所以 Gson 在这里表现正确。我不知道这里的泛型是否有问题。如果是这样,其他答案可能会有所帮助。


更新

没有其他问题,我试过了。只需删除封闭的东西。

于 2012-09-24T16:17:35.787 回答
0

当我遇到这个问题时,我们遇到了类型擦除——你可能想要研究实现泛型(如果你的代码中会有更多 List 元素)或者明确告诉 Gson 你想要序列化的类型

于 2012-09-24T16:12:47.700 回答
0

我不认为 JSON 知道如何读取 apublic List<Train> Trips;因为泛型仅在编译时。

有关更多详细信息,请参见https://sites.google.com/site/gson/gson-user-guide#TOC-Collections-Examples,但基本上,我认为您需要为元素指定 TypeToken

于 2012-09-24T15:48:06.027 回答
0

尝试在每个模型类中初始化列表。

IE

public class TripList 
{
    @SerializedName("Line")
    public String line;

    @SerializedName("CurrentTime")
    public int currentTime; 

    public List<Train> Trips = new ArrayList<Train>(); 

}
于 2012-09-24T16:25:26.537 回答