从JsonNode中筛选出字段

时间:2017-03-02 01:35:27

标签: java functional-programming java-8

我有一个Jackson JsonNode子类型ObjectNode

ObjectNode node = parent.path('somepath');

node有许多子字段,例如你在这个json对象中看到的:

{
  "somepath": {
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4
  }
}

因此,上述对象node将有四个子对象(所有JsonNode / ObjectNode s):abcd

给定对象node,我想过滤 out 一些子字段。例如,假设我想过滤掉所有一些字段名称列表,比如["b", "c"]。当我重新序列化node对象时,它看起来像这样:

{
  "somepath": {
    "b": 2,
    "c": 3
  }
}

我可以想到很多方法可以遍历字段名称列表和保持列表,并重建对象,但这看起来像是很多工作而且非常不清楚。我喜欢使用Stream.filter()类型的函数:

List<String> keepList = Lists.newArrayList("b", "c");
node.stream().filter( field -> keepList.contains(field.name()));

显然上面的代码不起作用,因为我无法“流式传输”ObjectNode。有没有办法让我以类似的方式工作,或者我是否已经走了很长的路?

1 个答案:

答案 0 :(得分:1)

ObjectNode中有一种方法可以完全符合您的要求:retain。您可以这样使用它:

ObjectNode node = parent.path('somepath');

node = node.retain(keepList);