使用Jackson将JSON中一个字段的不同类型的值映射到java对象

使用Jackson将JSON中一个字段的不同类型的值映射到java对象,java,jackson,pojo,Java,Jackson,Pojo,我们有一个json,其中特定字段的数据类型不同。我想使用jackson将其映射到Java对象。如果字段是一种类型,我就可以这样做。但对于不同的类型却找不到办法 { "firstname": "first_name", "age": "34", "add_info": [{ "type": "type_a",

我们有一个json,其中特定字段的数据类型不同。我想使用jackson将其映射到Java对象。如果字段是一种类型,我就可以这样做。但对于不同的类型却找不到办法

{
    "firstname": "first_name",
    "age": "34",
    "add_info": [{
            "type": "type_a",
            "value": "value_a"
        },
        {
            "type": "type_b",
            "value": [{
                    "title": "info_1",
                    "desc": "desc_1"
                },
                {
                    "title": "info_2",
                    "desc": "desc_2"
                }
            ]
        }
    ]
}
基本上我不知道如何定义它

public class AddInfo {
private String type;
private List<Value> value = null;
//getter and setters
}
公共类附加信息{
私有字符串类型;
私有列表值=null;
//二传手
}
在上面的JSON for add_info字段中,它包含一个JSON对象数组,其中第一个对象值为string类型,第二个值包含一个对象数组


如何使用jackson在Pojo中处理这种情况如果不想编写自定义反序列化程序,只需使用对象字段即可:

public class AddInfo {

  public String type;
  public Object value;

  public static void main(String[] args) throws Exception {
    ObjectMapper om = new ObjectMapper();
    AddInfo i1 = om.readValue("{\"value\":\"string\"}", AddInfo.class);
    System.out.println(i1.value);
    AddInfo i2 = om.readValue("{\"value\":[{\"x\":1}]}", AddInfo.class);
    System.out.println(i2.value);
  }
}
在第一次运行中,i1.value是一个字符串。在第二次运行中,i2.value是哈希映射的列表。
因此,您松开了Pojo结构。

列表创建一个类
,并编写一个自定义反序列化器感谢您的输入!我们如何在这里编写自定义反序列化程序?您会发现,hashmap的details列表意味着它将类似于x作为键,1作为值