Java 具有未知字段的多个数组的Gson解析
我的目标是解析以下结构的JSON响应Java 具有未知字段的多个数组的Gson解析,java,json,parsing,gson,Java,Json,Parsing,Gson,我的目标是解析以下结构的JSON响应 { "request":{"timestamp":1531826474,"version":1.1}, "Server1":["player1", "player2", "player3"], "Server2:"["player1", "player2", "player3"], [...] } 通过镜像类结构并使用自定义反序列化器迭代键并删除请求部分,在本场景中我不需要它。服务器名和玩家名未知,数量各不相同 public class WynnWorld
{
"request":{"timestamp":1531826474,"version":1.1},
"Server1":["player1", "player2", "player3"],
"Server2:"["player1", "player2", "player3"],
[...]
}
通过镜像类结构并使用自定义反序列化器迭代键并删除请求部分,在本场景中我不需要它。服务器名和玩家名未知,数量各不相同
public class WynnWorld {
private List<String> players;
public WynnWorld(List<String> players) {
this.players = players;
}
public List<String> getPlayers() {
return players;
}
public void setPlayers(List<String> players) {
this.players = players;
}
}
Wynworld是一个包含列表的对象。您尝试解析一个数组。无法将分析结果自动指定给Wynworld对象 试试那样的
for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
Type listType = new TypeToken<List<String>>() {}.getType();
List<String> players = context.deserialize(entry.getValue(), listType);
WynnWorld wynnWorld = new WynnWorld(players);
list.add(wynnWorld);
}
for(Map.Entry:jsonObject.entrySet()){
类型listType=newTypeToken(){}.getType();
List players=context.deserialize(entry.getValue(),listType);
WynnWorld WynnWorld=新WynnWorld(玩家);
添加(wynnWorld);
}
有点乱,但似乎还是遇到了同样的错误。奇怪的是,由于忽略了测试打印,反序列化程序似乎没有这样做,设置TypeToken可能会导致一些问题。这似乎是因为您为WynnWorld注册了JSONDeserializer,而不是为List注册了JSONDeserializer。试试这个:GsonBuilder=newgsonbuilder();Type Type=new-TypeToken(){}.getType();registerTypeAdapter(类型,新的JSONDeserializer());使用列表代替令牌,但它像一个符咒一样工作。谢谢!
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(WynnWorld.class, new JSONDeserializer());
Gson gson = builder.setFieldNamingPolicy(LOWER_CASE_WITH_UNDERSCORES).create();
List<WynnWorld> response = gson.fromJson(returnString.toString(), new TypeToken<List<WynnWorld>>(){}.getType());
for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
Type listType = new TypeToken<List<String>>() {}.getType();
List<String> players = context.deserialize(entry.getValue(), listType);
WynnWorld wynnWorld = new WynnWorld(players);
list.add(wynnWorld);
}