【问题标题】:Jackson JsonNode and Java Streams to return Optional EmptyJackson JsonNode 和 Java Streams 返回 Optional Empty
【发布时间】:2016-03-24 18:37:01
【问题描述】:

所以我有一个 json 输入,像这样:

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

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

{
    "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,但由于某种原因,它不允许我在任何地方使用它。

你想知道如何实现我想要的吗?

【问题讨论】:

    标签: java json jackson java-stream optional


    【解决方案1】:

    您可以过滤 Optional 以检查该值是否不是空字符串:

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

    【讨论】:

      【解决方案2】:

      这段代码也有帮助:

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

      【讨论】:

        猜你喜欢
        • 2019-07-20
        • 1970-01-01
        • 2014-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-14
        • 1970-01-01
        相关资源
        最近更新 更多