2017-03-02 36 views
1

过滤掉领域我有一个JacksonJsonNode子类型ObjectNode的:从JsonNode

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

node有许多子领域,比如你会在这个JSON对象看:

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

所以上述目的node将有四个子对象(所有JsonNode/ObjectNode在孩子们自己的权利):abcd

鉴于对象node,我想过滤的一些子字段。例如,假设我想过滤掉所有的,但是一些字段名称列表,比如["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

你说的是[杰克逊的'ObjectNode'(https://fasterxml.github.io/jackson-databind/javadoc/2.2.0/com/fasterxml/jackson/数据绑定/节点/ ObjectNode.html)? –

+1

是的。对不起......我应该把它链接起来。 –

回答

1

ObjectNode中有一种方法,它完全符合你的要求:retain。你可能会使用这种方式:

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

node = node.retain(keepList); 
+1

是的!谢谢。我错过了 - 我甚至没有想到那种方法做到了。应该仔细阅读文档。谢谢! –