如何使用ObjectMapper加载JSON以映射到特定的类结构? - java

我可以使用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 );

我以为我的错误是告诉映射程序将其作为Map.class读取,但不确定如何具体化。

参考方案

这应该工作:

Map<String, View> views = mapper.readValue( viewFile.getInputStream(), new TypeReference<Map<String, View>>() {});

本质上,通过使用TypeReference的匿名实例作为参数,通用类型(View)不会被擦除,而Jackson将使用它来干净地生成Map<String, View>作为响应。

JSON PATH字段NULL检查表达式 - java

我有一个像bellow的json数组:{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sa…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Jackson:使用不同的属性名称序列化/反序列化 - java

我有这个POJO:public class SetPoint { private String tagName; //more fields //getters and setters } 我从REST API获取SetPoints,对它们进行处理,然后再次发送。问题是我想从JSON反序列化SetPoint,例如:{ "tagnameOpc…

Java RegEx中的单词边界\ b - java

我在使用\b作为Java Regex中的单词定界符时遇到困难。对于text = "/* sql statement */ INSERT INTO someTable"; Pattern.compile("(?i)\binsert\b");找不到匹配项Pattern insPtrn = Pattern.compile(&…

Java Map,如何将UTF-8字符串正确放置到地图? - java

我有一个地图,LinkedHashMap更确切地说。我想在上面放一个字符串对象。然后,我读取此值以查看实际存储的内容。字符串本身具有非ASCII字符(西里尔文,韩文等)。将其放到地图上然后阅读后,这些字符将替换为??? s。一些代码:Map obj = new LinkedHashMap(); System.out.println("name: &…