我使用Gson創建和解析JSON,但是我遇到了一個問題。在我的代碼使用這個字段:Gson自定義反序列化
@Expose
private ArrayList<Person> persons = new ArrayList<Person>();
但我的JSON是格式化這樣的:
persons:{count:"n", data:[...]}
數據是人的數組。
有什麼辦法可以將這個JSON轉換成我的班級使用Gson?我可以使用JsonDeserializer嗎?
我使用Gson創建和解析JSON,但是我遇到了一個問題。在我的代碼使用這個字段:Gson自定義反序列化
@Expose
private ArrayList<Person> persons = new ArrayList<Person>();
但我的JSON是格式化這樣的:
persons:{count:"n", data:[...]}
數據是人的數組。
有什麼辦法可以將這個JSON轉換成我的班級使用Gson?我可以使用JsonDeserializer嗎?
你需要一個自定義解串器(http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/JsonDeserializer.html),是這樣的:
public static class MyJsonAdapter implements JsonDeserializer<List<Person>>
{
List<Person> people = new ArrayList<>();
public List<Person> deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context)
throws JsonParseException
{
for (each element in the json data array)
{
Person p = context.deserialize(jsonElementFromArray,Person.class);
people.add(p);
}
}
return people;
}
你可以試試下面的代碼解析您的JSON
String jsonInputStr = "{count:"n", data:[...]}";
Gson gson = new Gson();
JsonObject jsonObj = gson.fromJson(jsonInputStr, JsonElement.class).getAsJsonObject();
List<Person> persons = gson.fromJson(jsonObj.get("data").toString(), new TypeToken<List<Person>>(){}.getType());
其實我是這樣做的 –
我已經試過您的解決方案,但有仍然發生「IllegalStateException:預期BEGIN_ARRAY但是BEGIN_OBJECT」。這裏是我的實現:http://pastebin.com/4ZYs0S9A –
它基本上是僞代碼,不是你可以放入的東西。你必須得到與數據相對應的正確元素,然後解析它。看到這裏的反序列化方法(從1089開始),這是一個我曾經寫過的複雜的反序列化器:https://github.com/chriskessel/MyHex/blob/master/src/kessel/hex/domain/Player.java –
感謝您的回覆!我只是無法處理序列化程序,但現在,似乎,我終於明白了 –