假设我有一个如下所示的 JSON 文件:
{
"response" : [
{
"id" : "10",
"period" : "month",
"values" : [
{
"value" : 100,
"date" : "2013-05-10"
}
],
"parent" : "1"
},
{
"id" : "10",
"period" : "day",
"values" : [
{
"value" : {
"foo" : 10,
"bar" : 11,
"etc" : 4
},
"date" : "2013-05-10"
}
],
"parent" : "1"
},{
"id" : "13",
"period" : "year",
"values" : [
{
"value" : {
"info" : 1,
"pages" : 10,
"etc" : 4
},
"date" : "2013-05-10"
}
],
"parent" : "1"
}
]
}
请注意,“值”部分可以是单个值,也可以是对象(唯一的)。
我想使用 Jackson ObjectMapper 轻松地将其映射到 POJO。
到目前为止我所拥有的:
public class Response
{
List<ResponseEntry> response;
/*getters + setters */
public static class ResponseEntry
{
private String id;
private String period;
private String parent;
private List<Value> values;
/*setters + getters*/
public static class Value
{
private Object value;
private String date;
/*setters+getters*/
}
}
}
要映射响应,我只需指定我想要的文件并告诉 ObjectMapper 映射到“响应”类
ObjectMapper mapper = new ObjectMapper();
Response r = mapper.readValues(json, Response.class);
这行得通,但有没有比仅使用“对象”来保存“价值”更好的方法?由于“值”可以是单个值或对象,所以我很难弄清楚它应该是什么。我确信有一种多态的方式来处理这个问题,但我已经看过并且找不到任何有效的方法。我很困惑,我会很感激任何帮助。