Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java可选空Json字段_Java_Json_Jackson_Optional_Predicate - Fatal编程技术网

Java可选空Json字段

Java可选空Json字段,java,json,jackson,optional,predicate,Java,Json,Jackson,Optional,Predicate,我使用Jackson库中的JsonNode对象来保存json响应。我可能会有这样一个json: { "a": "test", "b": true } 但是,b字段有时可能会丢失。所以它可能会像这样回来: { "a": "test" } 在这种情况下,当我试图检索其值时,我希望返回Optional.isEmpty()。本质上,这是java代码: if(json.path("b").isMissingNode()) { return Optional.empty(

我使用Jackson库中的JsonNode对象来保存json响应。我可能会有这样一个json:

{
    "a": "test",
    "b": true
}
但是,
b
字段有时可能会丢失。所以它可能会像这样回来:

{
    "a": "test"
}
在这种情况下,当我试图检索其值时,我希望返回
Optional.isEmpty()
。本质上,这是java代码:

if(json.path("b").isMissingNode()) {
    return Optional.empty();
} else {
    return Optional.of(json.get("b").asBoolean());
}
但是,我想使用
.filter
.ofNullable
将其压缩为一行,但我不确定如何做到这一点。我发现这是一个如何使用过滤器的示例,但我知道
s
是什么

基本上,我想找到标记为
b
的字段,如果它不在那里,则返回空。如果存在,则返回其字段的布尔值


编辑:这不是重复的,因为我没有将整个json序列化为一个对象。我不需要JsonIgnore注释。我只想提取1个值。如上图所示。

您可以使用如下代码:

Optional<Boolean> b = Optional.ofNullable(json.get("b"))
                              .map(node -> node.asBoolean());
Optional b=Optional.ofNullable(json.get(“b”))
.map(节点->节点.asBoolean());
有两点值得注意:

  • 您不需要使用
    过滤器
    <空值的code>将返回空的空值。根据,如果节点值不存在,则返回null
  • 与您在参考问题中提出的关于
    s
    的问题密切相关,
    map
    是一个函数,仅当存在
    可选
    时才运行(例如,JSON具有
    b
    值)。它采用一个lambda表达式,该表达式相当于使用一个匿名类<代码>节点是
    函数
    接口的参数,该接口只有一种方法(
    应用
    )。你可以看看这些例子

可能的重复不是重复,因为我没有序列化到对象中。我只是提取1个值完美,这正是我想要的。很好的解释!