当前位置: 首页 > 面试题库 >

将JSON数据映射到Java对象

凌俊材
2023-03-14
问题内容

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

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:

公共抽象布尔值 ignoreUnknown

定义可以在反序列化期间忽略任何无法识别的属性的属性。如果为true,则所有无法识别的属性(即 没有设置器或创建者接受它们
)都将在没有警告的情况下被忽略(尽管仍会调用未知属性的处理程序)。

  1. 您的设置员不应返回任何值,这可以解释为什么杰克逊没有看到“标题”设置员。这是“ title”的设置方法:

    public void setTitle(String t) {
    title = t;
    

    }

  2. 这不是使其不起作用的原因,但是您要两次声明对象映射器,请考虑使用映射器,而不是实例化一个新的映射器:

    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);
    }
}


 类似资料:
  • 我已经建立了一个网络爬虫收集数据并存储在RDF/XML文件中,现在我想把数据映射到我的java对象...我该怎么做呢? 我找到了这段代码,可能对我有用,但我似乎不能正确地使用它...它从我的RDF/XML文件中收集主语、谓词和对象,但我可以用我的java指定对象来表示这些数据,我不知道如何...我搜索了很多,但没有很多有用的东西,所以对伙计们有帮助!:d 我想用这个java对象来表示它...这是我

  • 问题内容: 我正在尝试将JSON文件映射到类对象,然后根据新接收的JSON更新卡。 我的JSON结构是这样的 我的班级看起来像这样: 如何将JSON文件中的值映射到CardInfo类创建的对象的字段中? 更新资料 以下试用版在 ci.description上 打印为null ,是否表示从未创建该对象? 更新2 打印cardInfo给出以下内容: {$ class:FirstCard,id:1,说明

  • 假设我有这样的物体 我正在使用RestTemboard类从URL中获取json,如下所示: 之后,我想使用jackson对象映射器将json字符串转换为一个对象 将实体类作为第二个参数传递 问题是我应该如何编写ExampleJson实体来处理get-Showed json?我试过这样上课,但似乎不管用。 我得到了这样一个例外:

  • 问题内容: 我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表: 错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB 举个例子: 这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。 例

  • 问题内容: 我在这里有一个复杂的json 我正在尝试在我的模型类“ ChromeJsonModel”中映射它,例如: 但是我收到以下错误。 我为什么会在哪里出问题? 问题答案: 您拥有非常复杂的有效负载,其中相同的属性可能具有一个或多个对象。默认情况下不会处理这种情况,因此我们需要为此类属性实现自定义反序列化器。下面我创建了代表您的有效负载的简单模型: 如您所见,它是-es属性。让我们为这些属性实

  • 我使用JAVA jackson将JSON映射到JAVA pojo对象,我的JSON文件是: 在之后,我收到了以下错误消息: 不能反序列化出START_ARRAY令牌 我的POJO课程: 请问,这种JSON格式的正确java POJO是什么?谢谢