当前位置: 首页 > 知识库问答 >
问题:

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

濮景龙
2023-03-14

我们有一个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"
                }
            ]
        }
    ]
}

基本上这个POJO我不知道怎么定义它

public class AddInfo {
private String type;
private List<Value> value = null;
//getter and setters
}

在上面的JSON for add_info字段中,它包含一个JSON对象数组,其中第一个对象值是string类型,第二个值包含一个对象数组。

如何使用jackson处理Pojo的这种情况

共有1个答案

谢涵煦
2023-03-14

如果不想编写自定义反序列化程序,只需使用对象字段:

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。值是一个字符串。在第二轮中,i2。值是哈希映射的列表。所以你松开了Pojo结构。

 类似资料:
  • 我有一个restendpoint,它返回3级嵌套json,如下所示: 我有一个java类,没有相同的3个嵌套级别: 当我使用restTemplate拨打rest电话时: jackson甚至没有使用json ignore属性映射字段departName(因为我猜它不在同一嵌套级别)。 如何将这个http json响应映射到忽略嵌套父json的java字段?

  • 我正在编写一个JSON接口/库,用于Bugzilla的webservice。 这可以使用注释或其他内容吗?还是要为每个这样的实例编写一个自定义反序列化程序? 我试着做了一些研究,发现了一些关于值实例化器或使用构造函数的信息,但使用构造函数不是反bean吗?我发现新特性的文档很少或难以理解。 示例: 我对一个字段使用pojo的原因是,这个用户类是由另一个具有更多字段的用户类扩展的。虽然我可以实现一个

  • 假设我有这样的物体 我正在使用RestTemboard类从URL中获取json,如下所示: 之后,我想使用jackson对象映射器将json字符串转换为一个对象 将实体类作为第二个参数传递 问题是我应该如何编写ExampleJson实体来处理get-Showed json?我试过这样上课,但似乎不管用。 我得到了这样一个例外:

  • 考虑以下POJO: 使用MapSTRt,我创建了一个映射器,将映射到。由于“业务”“逻辑”,我需要将和约束为的和字段值。这是我使用另一个类得出的结论: 有没有其他方法可以实现这一点(即另一种映射器、装饰器等)?如何将多个值(xml附表、讲座)传递给映射器?

  • 我不想映射变量。是否有任何方法可以配置映射器,使其忽略此字段? 我知道我可以编写自定义数据映射器或使用流式API,但我想知道是否可以通过配置来实现?