杰克逊反序列化为pojos

时间:2011-03-16 13:10:44

标签: java jackson deserialization

我正在尝试反序列化来自我无法控制的应用程序的JSON对象。这是我的JSON:

{"assembly":
     {"name":"mm9",
      "id":32,
      "chromosomes":[
             {"chromosome":
                  {"name":"MT"}
             }]}}

我的Pojos,

class Assembly{
      private String name;
      private int id;
      private ArrayList<Chromosome> chromosomes;
      // getters & setters
}
class Chromosome {
     private String name;
     //getter/setters

}

但由于额外的字段“汇编”和&amp; “染色体”,所以用JSON如:

{"name":"mm9",
  "id":32,
    "chromosomes":[    
             {"name":"MT"}
                 ] }}
它只是工作。 有没有办法在不创建更复杂的POJOS的情况下修改配置或实现此目的?

1 个答案:

答案 0 :(得分:1)

问题在于,在第一个JSON片段中,chromosomes是一个字典(Map),其中一个条目(chromosome)恰好对应于您的Chromosome对象。

更精确的直接映射到Java类将是

class Assembly{
  ...
  private Map<String, Chromosome> chromosomes;
}

由于您提到无法控制源JSON的格式,您可能需要查看使用custom deserializers,或者使用Jackson的streaming支持而不是ObjectMapper进行直接映射,如果你不喜欢以这种方式改变你的POJO。

顺便说一下,最好通过接口类型(List)而不是具体类型(ArrayList)来引用集合。引用此类的代码不太可能真正关心或需要知道它正在使用ArrayList,仅引用List接口,而是更容易交换其他实现。需要(作为一般原则)。