我有一个JSON结构,它包含了我在POJO中没有的包装级别。像这样:
JSON:
{
"category1": {
"cat1Prop1": "c1p1",
"cat1Prop2": "c1p2",
"cat1Prop3": "c1p3"
},
"category2": {
"cat2Prop1": "c2p1",
"cat2Prop2": "c2p2"
},
"category3": {
"cat3Prop1": "c3p1",
"cat3Prop2": "c3p2",
"cat3Prop3": "c3p3"
},
"category4": {
"cat4Prop1": "c4p1"
}
}
POJO:
public class MyPojo {
private String cat1Prop1;
private String cat1Prop2;
private String cat1Prop3;
private String cat2Prop1;
private String cat2Prop2;
private String cat3Prop1;
private String cat3Prop2;
private String cat3Prop3;
private String cat4Prop1;
// Getters / setters, etc...
}
正如您所看到的,JSON具有“类别”级别(出于不同的原因,我不希望在我的Pojo中拥有该级别)。
我正在寻找一种方法来使用Jackson进行序列化/反序列化来顺利处理这个问题。
我知道杰克逊有一个@JsonUnwrapped注释,可以解决相反的问题。我也知道有一个"@JsonWrapped"注释的功能请求,我认为这将解决我的问题。
感谢任何关于此的输入或帮助,因为我一直在四处寻找。此外,任何关于如何使用任何其他库(如gson,flexjson等)完成此操作的建议也很有趣。
答案 0 :(得分:1)
您可以尝试使用此算法:
Map
。实施可能如下所示:
ObjectMapper mapper = new ObjectMapper();
Map<String, Map<String, String>> map = mapper.readValue(new File("X:/test.json"), Map.class);
Map<String, String> result = new HashMap<String, String>();
for (Entry<String, Map<String, String>> entry : map.entrySet()) {
result.putAll(entry.getValue());
}
System.out.println(mapper.convertValue(result, MyPojo.class));