java - Gson解析多个未知字段的数组

标签 java json parsing gson

我的目标是解析以下结构的 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;
    }
}

以前列表包含在一个单独的类中,但希望使用已放弃的 Gson 数组映射。

解串器:

public class JSONDeserializer implements JsonDeserializer<List<WynnWorld>> {

    @Override
    public List<WynnWorld> deserialize(JsonElement element, Type type, JsonDeserializationContext context) throws JsonParseException {

        JsonObject jsonObject = element.getAsJsonObject();
        jsonObject.remove("request");
        System.out.println(jsonObject);

        List<WynnWorld> list = new ArrayList<>();

        for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
            System.out.println("Parsing: "+entry.getValue());
            list.add(context.deserialize(entry.getValue(), WynnWorld.class));
        }

        return list;
    }

}

在过去的几个小时里,我一直在切换类型、添加/删除类,但无济于事,当前版本运行到 Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $尽管提供了一份 list 。显然,我的尝试都缺乏某种理解,所以如果有线索,我们将不胜感激。

解析尝试:

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());

最佳答案

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

关于java - Gson解析多个未知字段的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51380511/

相关文章:

java - Java 中的媒体播放器库

java - 创建一个 BitSet,其中 LSB 位添加为 1 或 0

javascript - 如何根据内容对 JSON 中的字段进行计数

php - 用 PHP 抓取一个网站,然后用 jQuery 遍历它

java - org.glassfish.javaeetutorial 的不可解析父 POM :dukes-tutoring

java - 如何在 JTextPane 中获取当前的 html 元素(标签)?

javascript - 我想从我的 json 文件中获取一个值

javascript - jQuery AJAX 附加到 Json 返回数据 "d:null"

Java + XML 问题

objective-c - 用于解析 html 的正则表达式;