首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用抽象类将JSON数据数组反序列化为POJO?

如何使用抽象类将JSON数据数组反序列化为POJO?
EN

Stack Overflow用户
提问于 2016-10-24 21:33:15
回答 1查看 286关注 0票数 2

我正在尝试将一些JSON映射到pojo中。我已经看到了如何在实际数据中使用信息来实现这一点,但我的情况是--我没有任何东西可以识别数据的不同之处,但我确实知道这个列表是由什么组成的。在下面的例子中,我可以得到囚犯或建筑物的列表,但在这种情况下,我知道我得到了囚犯的列表。

下面给我的是JSON (我知道嵌套的数据很奇怪,但是我被赋予了JSON,我无法控制它)。

代码语言:javascript
运行
复制
{
    "data": [{
        "data": {
            "create_date": "2015-09-30",
            "building": "12",
            "dob": "2/11/1965",
            "gender": "M",
            "location": {
                "zip": "10459"
            },
            "name": {
                "first": "James",
                "last": "Bond"

            },
            "id": "45"
        },
        "uri": "/prisoner/45"
    }, {
        "data": {
            "create_date": "2015-09-27",
            "building": "12",
            "dob": "12/15/1985",
            "gender": "M",
            "location": {
                "zip": "10459"
            },
            "name": {
                "first": "Hans",
                "last": "Gruber"

            },
            "id": "56"
        },
        "uri": "/prisoner/56"
    }],
    "totals": {
        "total": 2,
        "page": 1
    },
    "links": [{
        "uri": "/prisoners?limit=2"
    }]
}

我有一个数据对象,它包含一个总计对象和一个链接对象。我还有一个包含嵌套数据对象数组的Datum对象的集合(在本例中是一个列表)。Datum对象有一个Thing抽象类和一个Uri字符串。我有一个囚徒和一个建筑类扩展的东西。在上面的JSON中,我知道我得到了一份囚犯名单。

我现在的代码是:

代码语言:javascript
运行
复制
ObjectMapper mapper = new ObjectMapper();
Data data = mapper.readValue(responseJSON.toString(), Data.class);

如果我进入Datum并将Thing对象更改为Prisoner对象,它就会完美地工作。我的问题是,我如何使它接受囚徒或建筑,但仍然有抽象的东西类到位,或至少使它可以更通用。我知道我可以做几个基准类,但我相信一定有一个方法有一个基准类。实际上,我可以得到几十种不同的数据,而不仅仅是我的例子中的2种。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-24 21:48:10

你的意思是,你知道当你读这个值的时候会是什么类型的东西?因为在这种情况下,您可以参数化数据(即Data<T extends Thing>),并将类型参数传播到Datum,以指定所拥有的东西的子类。然后,当您调用readValue时,您需要告诉Jackson参数化类型,可以静态地这样做:

代码语言:javascript
运行
复制
mapper.readValue(jsonString, new TypeReference<Data<Prisoner>>(){});

它可以通过使用从TypeFactory获得的参数化类型来动态地完成。类似于:

代码语言:javascript
运行
复制
mapper.readValue("", mapper.getTypeFactory()
                           .constructParametricType(Data.class, thingSubclass));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40227921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档