我正在尝试反序列化来自我无法控制的应用程序的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的情况下修改配置或实现此目的?
答案 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
接口,而是更容易交换其他实现。需要(作为一般原则)。