2017-07-16 824 views
0

我有一些JSON,像這樣:如何刪除空節點JsonNode

String str = "{\"menu\":[{\"form1\":\"nameForm1\"}, {\"form2\":\"nameForm2\"}]}"; 
ObjectMapper objectMapper = new ObjectMapper(); 
JsonNode testNode = objectMapper.readTree(str); 

一些動作後,我修改了JSON。例如

Iterator<Map.Entry<String, JsonNode>> fieldIterator = testNode.fields(); 
while (fieldIterator.hasNext()) { 
    Map.Entry<String, JsonNode> entry = fieldIterator.next(); 
    if (entry.getValue().isArray()){ 
     for (JsonNode arrayNode : entry.getValue()){ 
      if (arrayNode.path("form2").isMissingNode()) { 
       ((ObjectNode) arrayNode).removeAll(); 
      } 
     } 
    } 
} 

而我的JSON開始看起來像:

{"menu":[{},{"form2":"nameForm2"}]} 

我怎樣才能獲得JSON沒有空數組元素,即

{"menu":[{"form2":"nameForm2"}]} 
+0

有噸JSON庫在那裏的代碼。你使用哪一個? – Henry

+0

你需要從條目中刪除arrayNode,目前你只是刪除arrayNode的屬性 –

+0

我使用com.fasterxml.jackson – alex

回答

0

正如我在評論指出需要從arrayNode(它是entry.getValue())中刪除arrayNode變量(必須命名爲arrayElementNode),目前您只是刪除了arrayNode的(arrayElementNode的)屬性

下面是這個邏輯

Iterator<Map.Entry<String, JsonNode>> fieldIterator = testNode. 
while (fieldIterator.hasNext()) 
{ 
    Map.Entry<String, JsonNode> entry = fieldIterator.next(); 
    if (entry.getValue().isArray()) 
    { 
     ArrayNode arrayNode = (ArrayNode) entry.getValue(); 
     for(int i = arrayNode.size()-1; i >= 0 ; i--) 
     { 
     if(arrayNode.get(i).path("form2").isMissingNode()) 
      arrayNode.remove(i); 

    } 
    } 
} 
+0

好的。謝謝。但如果我想刪除2個元素。該循環做了一次迭代。 – alex

+0

@alex更新了代碼,現在應該完成這項工作 –