我有一些json,像这样:
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 :(得分: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);
}
}
}