我正在使用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个值。这就像上面一样。
答案 0 :(得分:1)
您可以使用以下代码:
Optional<Boolean> b = Optional.ofNullable(json.get("b"))
.map(node -> node.asBoolean());
值得注意的几点:
filter
。 ofNullable
将返回一个空的可空。根据{{3}},如果节点值不存在,则返回null。s
的问题密切相关,map
是仅在Optional
存在时运行的函数(例如,JSON具有b
值) 。它需要一个lambda表达式,它相当于使用匿名类。 node
是Function
接口的参数,只有一个方法(apply
)。您可以查看示例Jackson documentation。