Java 可选空 Json 字段
Java Optional Null Json Field
我正在使用 Jackson 库中的 JsonNode 对象来保存 json 响应。我可能有一个 json 像这样:
{
"a": "test",
"b": true
}
但是,有时 b
字段可能会丢失。所以它可以像这样回来:
{
"a": "test"
}
在这种情况下,我想在尝试检索其值时 return Optional.isEmpty()
。本质上这是 java 代码:
if(json.path("b").isMissingNode()) {
return Optional.empty();
} else {
return Optional.of(json.get("b").asBoolean());
}
但是,我想使用 .filter
和 .ofNullable
将其压缩为 1 行,但我不确定如何执行此操作。我发现 显示了如何使用过滤器的示例,但我理解 s
是什么....
基本上我想找到标记为 b
的字段,如果不存在,则 return 为空。如果它在那里,那么 return 它的字段的布尔值。
编辑:这不是重复的,因为我没有将整个 json 序列化到一个对象中。我不需要 JsonIgnore 注释。我只想提取 1 个值。如上。
您可以像这样使用代码:
Optional<Boolean> b = Optional.ofNullable(json.get("b"))
.map(node -> node.asBoolean());
有几点值得注意:
- 您不需要使用
filter
。 ofNullable
将 return 一个空的可空值。根据 Jackson documentation,如果节点值不存在,则 return 为 null。
- 与您在参考问题中关于
s
的问题密切相关,map
是一个仅在 Optional
存在时才为 运行 的函数(例如 JSON 有 b
值)。它采用 lambda 表达式,相当于使用匿名 class。 node
是只有一个方法 (apply
) 的 Function
接口的参数。你可以看看例子 here.
我正在使用 Jackson 库中的 JsonNode 对象来保存 json 响应。我可能有一个 json 像这样:
{
"a": "test",
"b": true
}
但是,有时 b
字段可能会丢失。所以它可以像这样回来:
{
"a": "test"
}
在这种情况下,我想在尝试检索其值时 return Optional.isEmpty()
。本质上这是 java 代码:
if(json.path("b").isMissingNode()) {
return Optional.empty();
} else {
return Optional.of(json.get("b").asBoolean());
}
但是,我想使用 .filter
和 .ofNullable
将其压缩为 1 行,但我不确定如何执行此操作。我发现 s
是什么....
基本上我想找到标记为 b
的字段,如果不存在,则 return 为空。如果它在那里,那么 return 它的字段的布尔值。
编辑:这不是重复的,因为我没有将整个 json 序列化到一个对象中。我不需要 JsonIgnore 注释。我只想提取 1 个值。如上。
您可以像这样使用代码:
Optional<Boolean> b = Optional.ofNullable(json.get("b"))
.map(node -> node.asBoolean());
有几点值得注意:
- 您不需要使用
filter
。ofNullable
将 return 一个空的可空值。根据 Jackson documentation,如果节点值不存在,则 return 为 null。 - 与您在参考问题中关于
s
的问题密切相关,map
是一个仅在Optional
存在时才为 运行 的函数(例如 JSON 有b
值)。它采用 lambda 表达式,相当于使用匿名 class。node
是只有一个方法 (apply
) 的Function
接口的参数。你可以看看例子 here.