【问题标题】:Mapping Json to Java POJO Using Jackson使用 Jackson 将 Json 映射到 Java POJO
【发布时间】:2015-01-30 14:57:56
【问题描述】:
{  
   "query":{  
      "data":{  
         "val1":{  
            "id":123,  
            "name":"abc"  
         },  
         "val2":{  
            "id":13,  
            "name":"def"  
         },  
         "total":{  
            "count":2,  
            "page":{  
               "num":1  
            }  
         }  
      }  
   }  
}  

我的 json 看起来像上面那样。 "val1",val2" 是动态的,所以我将它映射到 Map.Everything 工作正常,直到我得到 "total" 标签。 由于结构不同,到对象的映射失败。 如何在解析或解析“total”到不同对象时跳过“total”标签。

我得到以下异常

Exception in thread "main" java.lang.IllegalArgumentException: Instantiation of [simple type, class jsom.schema.pojo.Definitions] value failed: Unrecognized field "count" (Class jsom.schema.pojo.MainResourceObj), not marked as ignorable
 at [Source: java.io.StringReader@5933cca2; line: 4, column: 26] (through reference chain: jsom.schema.pojo.Definitions["definitions"]->jsom.schema.pojo.MainResourceObj["count"])

我像下面这样更新了我的 pojo,但总标签仍然进入 Map.which 导致异常

HashMap<String, customObject> definitions;  
@JsonProperty("total")  
Total total;  

public class Total {

    public Total() {
        // TODO Auto-generated constructor stub
    }
    String count;
    Page page;
    public String getCount() {
        return count;
    }
    public void setCount(String count) {
        this.count = count;
    }
    public Page getPage() {
        return page;
    }
    public void setPage(Page page) {
        this.page = page;
    }

    @JsonCreator
    public static Total Create(String jsonString) throws JsonParseException,
            JsonMappingException, IOException {
        ObjectMapper mapper = new ObjectMapper();
        Total module = null;
        module = mapper.readValue(jsonString, Total.class);
        return module;
    }

}

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    我认为您想在变量声明上方使用@JsonIgnore 标记。试试看!

    @JsonIgnore  
    Total total; 
    

    【讨论】:

    • 嗨,colleen stock @JsonIgnore 注释没有起到作用,仍然是同样的异常
    • 嗯。您的异常消息看起来像是指出了一个不同的问题。如果您想跳过“total”标签,正如您在帖子中提到的,您应该使用@JsonIgnore。但是您的异常消息说“计数”无法识别。这让我认为您在 Total 课程中缺少一个“计数”成员。您可能需要添加它来解决您的问题。在你的 Total 课程中试试这个:public class Total { public int count; }
    • 我已经添加了我的总类,它具有 ta 属性,因为 Jakson 试图将该级别的所有元素放入 Map ,它给出了异常,因为对象具有不同的结构.
    【解决方案2】:

    如果你想忽略一个属性(又名字段),你应该使用@JsonIgnore 或@JsonIgnoreProperties 注释。

    您的代码将变为:

    HashMap<String, customObject> definitions;
    @JsonProperty("total")  
    Total total;  
    

    ...
    @JsonIgnoreProperties({"total"})
    ... class ... {
    HashMap<String, customObject> definitions;
    Total total;  
    ...
    

    使用 JsonIgnoreProperties 允许您在一个地方排除多个属性。

    【讨论】:

    • 嗨,David "@JsonIgnore" 和 @JsonIgnoreProperties 注释没有成功,仍然是同样的异常
    • 您应该在 Query 类中添加注释以忽略 Total。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多