代码之家  ›  专栏  ›  技术社区  ›  Jeeppp

Jackson databind JSON布尔转换

  •  2
  • Jeeppp  · 技术社区  · 8 年前

    我正在使用Jackson objectMapper将JSON转换为对象,并进行一些转换并将其转换回JSON。

    JSON就像 { "id":"abc1243", "val":1, "isDel":true}

    在上面的例子中,val是int,isDel是boolean。

    我的对象定义如下

    public class MyObj{
      private String id;
      private String val;
      private String isDel;
       //getters and setters
    
    }
    

    当我将JSON转换为MyObj时,字符串id和Int val被绑定到字符串中,但布尔值没有绑定,因此我得到null。

    Im使用以下方法

       ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        try {
            MyObj myObj = mapper.readValue(new File("/Users/sample.json"), MyObj.class);
    }
    

    我可以知道为什么布尔值没有绑定到字符串成员吗。

    2 回复  |  直到 8 年前
        1
  •  4
  •   Sharon Ben Asher    8 年前

    您可以有一个接受布尔值并进行必要转换的setter

    @JsonProperty("isDel")
    public void setIsDel(boolean isDel) {
      this.isDel = String.valueOf(isDel);
    }
    

    注意:这不会干扰接受字符串的setter(注释告诉Jackson使用此特定方法)

        2
  •  0
  •   bhantol    8 年前

    绘制地图是很自然的 boolean 在JSON中转换为Java中的布尔值。

    Checkout line 141 deserializeIfNatural() 其中使用类测试令牌类型 base.isAssignableFrom(Boolean.class) 在这种情况下,它是不可赋值的,因为它是字符串,因此没有映射。