【问题标题】:Java Optional Null Json FieldJava 可选空 Json 字段
【发布时间】:2016-03-14 20:24:04
【问题描述】:

我正在使用 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 个值。就像上面一样。

【问题讨论】:

标签: java json jackson optional predicate


【解决方案1】:

你可以像这样使用代码:

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

有几点值得注意:

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

【讨论】:

  • 完美,这正是我想要的。很好的解释!
猜你喜欢
  • 2022-12-20
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
相关资源
最近更新 更多