将JSON数据映射到Java对象

我一直在尝试使用我的PC上的JSON文件将JSON数据映射到Java对象,但它总是抛出exception:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "title" (Class MovieResponse), not marked as ignorable at [Source: C:\M.json; line: 2, column: 13] (through reference chain: MovieResponse["title"])

我的数据类:

 import org.codehaus.jackson.annotate.JsonProperty; public class MovieResponse{ private String title; private Integer year; @JsonProperty("mpaa_rating") private String mpaaRating; private Integer runtime; @JsonProperty("critics_consensus") private String criticsConsensus; public String getTitle(){ return title; } public String setTitle(String t){ return title = t; } public Integer getYear(){ return year; } public Integer setYear(Integer y){ return year = y; } public String getMpaa(){ return mpaaRating; } public String setMpaa(String mp){ return mpaaRating = mp; } public Integer getRuntime(){ return runtime; } public Integer setRuntime(Integer r){ return runtime = r; } public String getCritics(){ return criticsConsensus; } public String setCritics(String c){ return criticsConsensus = c; } @Override public String toString(){ return "MovieResponse[title="+title+",year="+year+",mpaa_Rating="+mpaaRating+",runtime="+runtime+",critics_Consensus="+criticsConsensus +"]"; } } 

我的映射器类:

 import java.io.File; import java.io.IOException; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import java.net.*; import org.codehaus.jackson.annotate.JsonIgnoreProperties; @JsonIgnoreProperties public class Movie{ public static void main(String[] args) throws MalformedURLException, URISyntaxException, IOException { MovieResponse a = new MovieResponse(); ObjectMapper mapper = new ObjectMapper(); try{ MovieResponse response = new ObjectMapper().readValue(new File("C:\\M.json"), MovieResponse.class); }catch(MalformedURLException u){ u.printStackTrace(); } catch(IOException i){ i.printStackTrace(); } } 

json文件包含以下数据:

 { "title": "Toy Story 3", "year": 2010, "mpaa_rating": "G", "runtime": 103, "critics_consensus": "Deftly blending comedy, adventure, and honest emotion, Toy Story 3 is a rare second sequel that really works." } 

我究竟做错了什么? 我正在使用jackson图书馆。

以下是我在代码中看到的问题列表:

  1. @JsonIgnoreProperties属性应该放在MovieResponse类之上,而不是Movie类。 查看文档 ,最值得注意的是有关“ignoreUnknown”属性的内容,默认为false:

    public abstract boolean ignoreUnknown

    定义在反序列化期间是否可以忽略任何无法识别的属性的属性。 如果为true,则无法识别所有无法识别的属性(即, 没有可接受它们的setter或创建者)将被忽略而不会发出警告(尽管仍会调用未知属性的处理程序,如果有的话)。

  2. 你的二传手不应该返回任何价值,这可以解释为什么jackson没有看到“头衔”的制定者。 以下是“标题”的设置者应如何:

     public void setTitle(String t) { title = t; } 
  3. 不是它不起作用的原因,但是你要两次声明你的对象映射器,考虑使用你的映射器而不是实例化一个新映射器:

     MovieResponse response = mapper.readValue(new File("C:\\M.json"), MovieResponse.class); 

编辑:这是我认为的固定代码:

 import java.io.File; import org.codehaus.jackson.map.ObjectMapper; import java.net.*; import org.codehaus.jackson.annotate.JsonIgnoreProperties; public class Movie { public static void main(String[] args) throws Exception { MovieResponse response; ObjectMapper mapper = new ObjectMapper(); response = mapper.readValue(new File("C:\\M.json"), MovieResponse.class); System.out.println(response); } } 

这也会奏效

 ObjectMapper mapper = new ObjectMapper(); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); MovieResponse response = mapper.readValue(new File("C:\\M.json"), MovieResponse.class);