Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有未知字段的多个数组的Gson解析_Java_Json_Parsing_Gson - Fatal编程技术网

Java 具有未知字段的多个数组的Gson解析

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

我的目标是解析以下结构的JSON响应

{
"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);
    }