2017-07-16 68 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更新了代码,现在应该完成这项工作 –