Java 使用Jackson JSON解析将TRUE或FALSE转换为布尔值

Java 使用Jackson JSON解析将TRUE或FALSE转换为布尔值,java,json,Java,Json,我正在使用Jackson注释将JSON响应解析为POJO对象。我在POJO中使用布尔变量映射来自JSON的值“true”和“false”。但突然之间,我们在JSON中得到了“TRUE”和“FALSE”两个值,并且解析这些值失败。 有谁能建议一种将它映射到布尔值的方法吗?因为这个变量在很多地方使用,我不想将逻辑更改为字符串或布尔值。我不确定这是您想要的。 但它是有效的 Boolean param = Boolean.parseBoolean((String)yourValue); 测试代码是 p

我正在使用Jackson注释将JSON响应解析为POJO对象。我在POJO中使用布尔变量映射来自JSON的值“true”和“false”。但突然之间,我们在JSON中得到了“TRUE”和“FALSE”两个值,并且解析这些值失败。
有谁能建议一种将它映射到布尔值的方法吗?因为这个变量在很多地方使用,我不想将逻辑更改为字符串或布尔值。

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

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

我在使用Jackson解析器1.8.5时也遇到了类似的问题。 JavaPOJO到JSON有效,但返回JavaPOJO的JSON无效。 在JavaPOJO中,如果布尔变量声明为

private Boolean isMyVar;
然后,Jackson生成等效的JSON作为

{..,
"myVar" : false,
..
}
(我知道布尔变量的命名在这里是错误的,但是JAR是第三方,并且说您不能更改它!)

我认为这是Jackson解析器处理布尔值的方式的问题。 我将JSON从“myVar”:false更改为“isMyVar”:false,从JSON创建回JavaPOJO工作正常


有人知道这是否仍然是一个bug或者已经解决了吗?

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

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

所以
boolean是footrue
fooTrue
结束,当解组时,它将尝试调用
setIsFooTrue(),这是不正确的

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

private boolean isFoo;

public boolean isFoo() {
    return isFoo;
}

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

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

我仍然在1.9.2中讨论这个问题。