Jackson JsonNode and Java Streams to return Optional Empty



所以我有一个json输入,类似于以下内容:

{
    "a":"something",
    "b":"something2"
}

此输入可以有两种其他形式:

{
    "a":"something",
    "b":""
}

{
    "a":"something"
}

我有一个这样的输入类,我把它存储在:

public class Foo {
    private String a;
    private Optional<String> b;
}

在后两种情况下,我想将b存储为Optional.empty()。我已经在第三种情况下用这行代码找到了如何做到这一点:

Optional.ofNullable(inputNode.get("b")).map(node -> node.asText())

这适用于第三种情况。它返回Optional.empty。但对于第二种情况就不那么多了,因为b最终只是一个空字符串。我试着在.map之前和之后使用.reduce,但由于某种原因,它不允许我在任何地方使用它。

以及如何实现我想要的想法?

您可以过滤Optional以检查值是否为空String:

Optional<String> b = Optional.ofNullable(inputNode.get("b"))
        .map(JsonNode::asText)
        .filter(s -> !s.isEmpty());

此代码还有助于:

Optional.ofNullable(jsonNode.findValue("XYZ")).map(JsonNode::asText).orElse(null);

最新更新