Java可选Null Json字段

时间:2016-03-14 20:24:04

标签: 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();
} else {
    return Optional.of(json.get("b").asBoolean());
}

但是,我想使用.filter.ofNullable将其压缩为1行,但我不确定如何执行此操作。我发现this post显示了如何使用过滤器的示例,但我了解s是什么......

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码:

Optional<Boolean> b = Optional.ofNullable(json.get("b"))
                              .map(node -> node.asBoolean());

值得注意的几点:

  • 您无需使用filterofNullable将返回一个空的可空。根据{{​​3}},如果节点值不存在,则返回null。
  • 与您在引用问题中s的问题密切相关,map是仅在Optional存在时运行的函数(例如,JSON具有b值) 。它需要一个lambda表达式,它相当于使用匿名类。 nodeFunction接口的参数,只有一个方法(apply)。您可以查看示例Jackson documentation