【问题标题】:Use different bean class in Jackson JSON based on variable?基于变量在杰克逊 JSON 中使用不同的 bean 类?
【发布时间】:2011-01-29 18:23:47
【问题描述】:

我有如下 JSON:

[{
  'kind':'1',
  'value1': 'foo',
  'value2': 'bar',
  ...
},
{
  'kind':'2',
  'value1': 'foo',
  'value2': 'bar',
  ...
}
..]

基本上是具有相同变量的对象列表。在我的代码中,我想创建一个 A 类的 ArrayList,其中包含这些对象。但是,我希望每个对象都属于一或二子类,具体取决于“种类”值。

我怎样才能做到这一点?

谢谢!

【问题讨论】:

    标签: java json subclass jackson


    【解决方案1】:

    这就是杰克逊所说的“多态类型处理”。有一个很好的解释如何做到这一点here。您需要告诉 Jackson 在序列化时将类名放入 JSON 中,并在反序列化时使用该类名。这是通过注释完成的:

    @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, 
                  include=JsonTypeInfo.As.PROPERTY, property="kind")
    

    [来源:@StaxMan(下)。]

    如果您无法控制 JSON 格式,您可以使用 Jackson 将其反序列化为一些常见的中间对象,然后编写代码从中创建所需的子类对象。或者,使用 json.org 库将 JSON 字符串反序列化为 org.json.JSONObject,然后编写代码以基于 JSONObject 的属性构造所需的对象。

    【讨论】:

    • 正确,这是要使用的机制。在这种情况下,要使用的属性名称将是“种类”,因此它类似于 @JsonTypeInfor(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="kind")。还;而不是类名,看起来像是要使用逻辑名称(“1”,“2”),因此是“JsonTypeInfo.Id.NAME”。
    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2019-05-02
    • 2017-07-28
    • 2019-11-25
    相关资源
    最近更新 更多