我尝试使用fasterxml / jackson将json结构映射到pojo。
我的json来自一个文件,看起来像这样:
{
"groups": [
{
"name": "Group1",
"icon": "group1.png",
"banner": "banner.png"
},
{
"name": "Group2",
"icon": "group2.png",
"banner": "banner.png"
}
],
"ticker": [
{
"title": "ticker1",
"description": "description",
"url": "bla",
"icon": "icon.png",
"banner": "banner.png",
"group": "Group1",
"enabled": "true",
"startTime": "00:00",
"startDate": "15.10.2013"
}
]
}
我对这些团体感兴趣。因此我创建了一个类Groups:
public class Groups implements Serializable {
private final static long serialVersionUID = 42L;
private List<Group> groups;
public Groups() {}
public Groups ( List<Group> groups ) {
this.groups = groups;
}
public List<Group> getGroups() {
if (groups == null) {
groups = new ArrayList<Group>();
}
return groups;
}
public void add(Group group) {
getGroups().add(group);
}
}
通常我使用此代码将json映射到pojo:
public static <T> T readJsonFile(File file, Class<T> valueType) throws IOException {
String json = readJsonFile(file.getAbsolutePath());
if( StringUtils.isEmpty(json) ) {
return null;
}
return createObjectMapper().readValue(json, valueType);
}
如果pojo是外部json对象,这可以正常工作。
但是,如果我试图提取它失败的组:
"no suitable constructor"
。
如何提取嵌套在json结构中的pojo?
答案 0 :(得分:0)
public Groups() {
groups = new ArrayList<>();
}
默认构造函数用于序列化,groups
仅定义为接口。
我甚至会更改所有内容,并将字段初始化为非空值。