【问题标题】:TRUE or FALSE into boolean using Jackson JSON parsing使用 Jackson JSON 解析将 TRUE 或 FALSE 转换为布尔值
【发布时间】:2012-09-07 10:29:21
【问题描述】:

我正在使用 Jackson 注释将 JSON 响应解析为 POJO 对象。我在 POJO 中使用布尔变量来映射来自 JSON 的值“true”和“false”。但突然间,我们将值作为“TRUE”和“FALSE”转换为 JSON 并解析这些值失败。 任何人都可以建议将其映射到布尔值的方法,因为这个变量在很多地方我不想将逻辑更改为字符串到布尔值。

【问题讨论】:

    标签: java json


    【解决方案1】:

    这不是一个真正的问题,这基本上是 BeanUtils 的工作方式。

    对于 boolean 变量,Jackson 从 setter 名称中删除 is 以导出它在编组为 JSON 时期望的变量名称,并将 set 添加到相同的派生名称以解组回 POJO。

    所以boolean isFooTrue; 在编组为 JSON 时最终为 fooTrue,而在解组时它会尝试调用 setIsFooTrue();,这是不正确的。

    如果您使用 IDE 并生成了 getter/setter,您可能会注意到为 boolean isFoo; 生成的代码基本上忽略了 is,就好像 var 名称只是 foo

    private boolean isFoo;
    
    public boolean isFoo() {
        return isFoo;
    }
    
    public void setFoo(boolean isFoo) {
        this.isFoo= isFoo;
    }
    

    两个选项是从 var 名称中删除 is,或者将 is 添加到 setter 名称中。

    【讨论】:

      【解决方案2】:

      我不确定这是你想要的。 但它有效。

      Boolean param = Boolean.parseBoolean((String)yourValue);
      

      测试的代码是

      public class program10 {
      
          public static void main(String args[]) {
      
              String yourValue = "TRUE"; // This is what you get from json.
              Boolean param = Boolean.parseBoolean((String)yourValue);
      
              if(param == true) 
                  System.out.println("Value is true");
              else
                  System.out.println("Value is false");
              System.out.println(param);
          }
      }
      

      【讨论】:

        【解决方案3】:

        我在使用 Jackson Parser 1.8.5 时也遇到了类似的问题。 Java POJO 到 JSON 的工作,但相同的 JSON 返回到 Java POJO 没有。 在 Java POJO 中,如果布尔变量声明为

        private Boolean isMyVar;
        

        然后 Jackson 生成与

        等效的 JSON
        {..,
        "myVar" : false,
        ..
        }
        

        (我知道这里的布尔变量命名是错误的,但是JAR是第三方的并且说你不能改变它!)

        我认为这是 Jackson 解析器设计用于处理布尔值的方式的问题。 我将 JSON 从 "myVar" : false 更改为 "isMyVar" : false 并且从 JSON 创建回 Java POJO 工作正常。

        有人知道这仍然是一个错误还是已经解决?

        【讨论】:

        • 我在 1.9.2 中仍然遇到这个问题。
        猜你喜欢
        • 1970-01-01
        • 2015-09-18
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        相关资源
        最近更新 更多