java - GSON:反序列化通用对象

标签 java json gson

我正在尝试使用 GSON 库从维基百科反序列化一些 JSON。通常,我会像在 JSON 中一样在 Java 中创建每个对象,例如:

{
    query: {
        pages: {
            page: {
                pageid: 168079,
                ns: 0,
                title: "2010 FIFA World Cup"
            }
        }
    }
}

这将允许我使用以下 Java 代码进行反序列化:

class PageIdResponseGson
{
    private QueryResults query;

    public static class QueryResults
    {
        private PageResults pages;

        public PageResults getPages() {
            return pages;
        }
    }

    public static class PageResults
    {
        private PageResult page;

        public PageResult getPage() {
            return page;
        }
    }

    public static class PageResult
    {
        private int pageid;
        private int ns;
        private String title;

        public int getNs() {
            return ns;
        }

        public int getPageid() {
            return pageid;
        }

        public String getTitle() {
            return title;
        }
    }

    public QueryResults getQuery() {
        return query;
    }
}

但是维基百科 JSON 使用 page-id 作为对象名称,这意味着我不能采用这种方法。

{
    query: {
        pages: {
            168079: {
                pageid: 168079,
                ns: 0,
                title: "2010 FIFA World Cup"
            }
        }
    }
}

有没有办法使用某种通用包装器来处理这些动态对象名称?

最佳答案

这里有几种选择:

  1. 您使用 Hashmaps-->任何东西都可以是 hashmap 中的键,GSON 就可以了。
  2. 您实现自己的 TypeAdapter 和 TypeAdapterFactory 来处理此类情况,当您遇到目标类中不存在的数字字段时,您就知道您拥有 pageId,并且应该将其重新映射到您的 PageResults.page 成员上.

关于java - GSON:反序列化通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9214218/

相关文章:

arrays - 带有数组的 Powershell ConvertFrom-Json 向数组值添加额外的空格

java - 由 : com. google.gson.JsonSyntaxException : java. lang.IllegalStateException 引起:预期为 BEGIN_OBJECT,但在第 1 行第 2 列处为 STRING

java - 在 Java 中嵌入 Groovy(绑定(bind))

php - PayPal REST API 获取总金额

java - Retrofit 是如何转化为对象的?

java - 使用 gson 将 Java 对象转换为 JSON 字符串

android - 如何在 android 中使用 Gson 库解析 json 响应?

java - 如何将 Java 程序转换为 .exe 文件?

java - 将文件保存到 Jersey API 中的服务器应用程序目录

java - 如何将 AES CCM 与 BouncycaSTLe JCE 提供程序一起使用 - CCMParameters