2017-03-02 30 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

是的!謝謝。我錯過了 - 我甚至沒有想到那種方法做到了。應該仔細閱讀文檔。謝謝! –