0

GSONを使用してJSONからPOJO(Plan Old Java Object)を作成するのに問題があるようです。このチュートリアルに従ってT に進みましたが、まだ null オブジェクトを取得しています。これが私のコードです:

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;
}

blue.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 はエラーをスローしません。ただ、イライラする null 値を返すだけです。Java データ オブジェクトの形式または処理方法に何か問題がありますか? どんな助けでも大歓迎です

4

4 に答える 4

0

各モデルクラスでリストを初期化してみてください。

つまり

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 に答える
0

些細な問題があります: TripList を含むオブジェクトを読んでいます:

{
   "TripList": ...
}

ただし、TripList 自体を読んでいることを Gson に伝えます。

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

TripListという名前のプロパティが含まれていないため、TripListこれは次のように動作します。不明なプロパティ (つまり、「TripList」) は無視され、欠落しているプロパティ (つまり、「TripList」のすべてのメンバーはデフォルト値のままになります。

したがって、Gson はここで正しく動作します。ここでジェネリックに問題があるかどうかはわかりません。もしそうなら、他の答えが役立つかもしれません。


アップデート

他に問題はありません。試してみました。囲んでいるものを取り除くだけです。

于 2012-09-24T16:17:35.787 に答える
0

public List<Train> Trips;汎用性はコンパイル時のみであるため、JSON は a の読み取り方法を認識していないと思います。

詳細については、 https: //sites.google.com/site/gson/gson-user-guide#TOC-Collections-Examples を参照してください。ただし、基本的には、要素に TypeToken を指定する必要があると思います

于 2012-09-24T15:48:06.027 に答える
0

私がこの問題に遭遇したとき、私たちは型の消去に直面しました - ジェネリックの実装を検討することをお勧めします (コードにさらに List 要素がある場合)、または Gson にシリアル化する型の型を明示的に伝えます。

于 2012-09-24T16:12:47.700 に答える