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());

有几点值得注意:

  • 您不需要使用 filterofNullable 将 return 一个空的可空值。根据 Jackson documentation,如果节点值不存在,则 return 为 null。
  • 与您在参考问题中关于 s 的问题密切相关,map 是一个仅在 Optional 存在时才为 运行 的函数(例如 JSON 有 b 值)。它采用 lambda 表达式,相当于使用匿名 class。 node 是只有一个方法 (apply) 的 Function 接口的参数。你可以看看例子 here.