使用Jackson将Json映射到Java POJO

时间:2015-01-30 14:57:57

标签: java json jackson

{  
   "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”标记。

我得到以下异常

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

}

2 个答案:

答案 0 :(得分:1)

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

@JsonIgnore  
Total total; 

答案 1 :(得分:1)

如果要忽略属性(也称为字段),则应使用@JsonIgnore或@JsonIgnoreProperties注释。

您的代码将成为:

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

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

使用JsonIgnoreProperties可以在一个地方排除多个属性。