0

初めて GSON を使用しています。httpGet リクエストを呼び出すと、次のように Json オブジェクト文字列の結果が返されます。

{"ContentEncoding":null,"ContentType":null,"Data":[{"Id":3,"Name":"Alabama"},
{"Id":4,"Name":"Alaska"},{"Id":5,"Name":"Arizona"},{"Id":6,"Name":"Arkansas"}]}

私が欲しいのは Data オブジェクトだけなので、私の CustomModel クラスは次のようになります:

 public class CustomModel {

@SerializedName("Id")
private int Id;

@SerializedName("Name")
private string Name;

public int getId() {
   return this.Id;
}
 public void setId(int id) {
   this.Id = id;
}
 public string getName() {
   return this.Name;
}
 public void setName(string Name) {
   this.Name = Name;
}

}

GSON を使用して、次のように解析しようとします。

 JsonArray Jarray = (JsonArray) parser.parse(results).getAsJsonObject().get("Data");
 for(JsonElement obj : Jarray )
 {

    CustomModel cse = gson.fromJson(obj  , CustomModel.class);
    // list.add(cse); //add the values to global List object
 }

しかし、これは for ループ内で "Expected Begin_Object but was string" というエラーをスローします。私はグーグルからこれを理解しようとしていますが、答えは役に立ちません

4

2 に答える 2

2

java.lang.Stringにインポートしていないと思いますがCustomModel、という名前のカスタム クラスを使用していますstring。これがGsonとして扱っているものですObject

Expected Begin_Object but was string

インポートする必要がありますjava.lang.String


はい、ループする代わりに、リストを次のように直接逆シリアル化できます

Type listType = new TypeToken<List<CustomModel>>(){}.getType();
List<CustomModel> listCSE = gson.fromJson(Jarray, listType);

System.out.println(listCSE.get(0).getName()); // Alabama
于 2013-10-09T21:11:05.810 に答える