在基于变量的Jackson JSON中使用不同的bean类?

时间:2011-01-29 18:23:48

标签: java json subclass jackson

我有以下JSON:

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

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

我该如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分: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的属性编写代码以构造所需的对象。

相关问题