Java可选空Json字段
我使用Jackson库中的JsonNode对象来保存json响应。我可能会有这样一个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(
{
"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具有可选
值)。它采用一个lambda表达式,该表达式相当于使用一个匿名类<代码>节点是b
接口的参数,该接口只有一种方法(函数
)。你可以看看这些例子应用