我有一个Jackson JsonNode
子类型ObjectNode
:
ObjectNode node = parent.path('somepath');
node
有许多子字段,例如你在这个json对象中看到的:
{
"somepath": {
"a": 1,
"b": 2,
"c": 3,
"d": 4
}
}
因此,上述对象node
将有四个子对象(所有JsonNode
/ ObjectNode
s):a
,b
, c
和d
。
给定对象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
。有没有办法让我以类似的方式工作,或者我是否已经走了很长的路?
答案 0 :(得分:1)
ObjectNode
中有一种方法可以完全符合您的要求:retain
。您可以这样使用它:
ObjectNode node = parent.path('somepath');
node = node.retain(keepList);