【发布时间】:2015-05-21 21:57:43
【问题描述】:
我想将 Jackson 的 Tree Model 与 Java 8 流 API 一起使用,如下所示:
JsonNode jn = new ObjectMapper().readValue(src, JsonNode.class);
return jn.stream().anyMatch(myPredicate);
但是,JsonNode 似乎没有实现stream(),而且我找不到任何标准的助手来实现。
JsonNode 实现了 Iterable,所以我可以使用 Google Guava 实现相同的结果:
JsonNode jn = new ObjectMapper().readValue(src, JsonNode.class);
return Iterables.find(jn, myPredicate);
但是纯 Java 解决方案呢?
【问题讨论】:
-
你不能真的在 JSON 图上做 java 流,至少如果你这样做的话,如果必须限制为顺序流,即使那样我也不确定它是否会很有意义。同时,您可以让子节点在其父节点之前到达,这有点奇怪。也许您正在考虑流式传输转换为 POJO 的顶级对象列表。这个问题似乎在这里得到了回答:stackoverflow.com/questions/32683785/…
-
嘿,@karl-nicholas。我的意思是从节点读取序列(无论是对象还是数组)。但是,问题是关于与 POJO 无关的杰克逊树模型。接受的答案正是我所需要的。至于流式传输图形:JSON 文档是一种非常特殊的图形(树),并确保它可以被遍历,例如广度或深度优先。
-
当然,可以遍历树,但流不应该是同一个对象吗?如果我流式遍历树,您会为每个属性获得不同的对象,例如日期、整数、浮点数等?我知道一切都是 JsonNode 但那是一个包装类。如果您不关心节点中的内容,或者要过滤某些内容,是的,我想可能会很方便。无论如何,我不知道您要做什么,所以不用担心,我只是在考虑一般流式树结构的问题。很高兴你得到了你想要的东西。
标签: json jackson java-8 guava java-stream