我可以使用Jackson ObjectMapper将JSON文件中的数据直接加载到我自己的数据结构中吗?我正在尝试从JSON文件加载对象的地图,但不知道该怎么做。
例如,给定:
public class View{
public String name;
public String title;
public String link;
}
我想在JSON文件中创建/加载Views的地图。所以,如果我的JSON是:
{
"login" : {
"name" : "login",
"title" : "Login Page",
"link" : "login.jsp"
},
"logout" : {
"name" : "logout",
"title" : "Logout Page",
"link" : "logout.jsp"
}
}
我希望能够将所有内容加载到地图中。
我尝试了以下但没有成功。它只是将所有内容加载到地图中:
Map<String, View> views;
ObjectMapper mapper = new ObjectMapper();
views = mapper.readValue( viewFile.getInputStream(), Map.class );
我认为我的错误是告诉mapper将其作为Map.class读取,但不知道如何具体说明它。
答案 0 :(得分:6)
这应该有效:
Map<String, View> views = mapper.readValue( viewFile.getInputStream(), new TypeReference<Map<String, View>>() {});
基本上通过使用TypeReference
的匿名intance作为参数,泛型类型(View
)不会被删除,并且Jackson将使用它来干净地生成Map<String, View>
作为响应。 / p>
答案 1 :(得分:0)
像
一样定义你的班级public class View{
public View() {
}
public Info getLogin() {
return login;
}
public void setLogin(Info login) {
this.login = login;
}
public Info getLogout() {
return logout;
}
public void setLogout(Info logout) {
this.logout = logout;
}
private Info login;
private Info logout;
}
class Info{
public Info() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
private String name;
private String link;
private String title;
}
然后使用以下代码将json绑定到类
View v = new ObjectMapper().readValue(JSON_STRING, View.class);
这会将json绑定到View类的对象。