如果除了一个字段之外值为空,我需要从 JsonNode 中删除值。我可以使用 JsonNode.Iterator() 删除对 JsonNode 的迭代,但它只给出值。我需要检查作为键的字段replacementItems并且即使该字段为空也不要将其删除。
public JsonNode stripNulls(JsonNode node) {
log.info("striping nulls");
if(node == null){
return null;
}
Iterator<JsonNode> it = node.iterator();
log.info("tt" + it.hasNext());
while (it.hasNext()) {
JsonNode child = it.next();
if (child.isNull()) {
it.remove();
}
else{
if(child.get("promotion") != null){
continue;
}else{
stripNulls(child);
}
}
}
}
我正在尝试使用 JsonNode.fields() 来获取键/值对并检查该字段是否是替代项,不要删除它,否则删除。
public JsonNode stripNulls(JsonNode node) {
log.info("striping nulls");
if(node == null){
return null;
}
Iterator<Map.Entry<String, JsonNode>> fields = node.fields();
log.info("dd " + fields.hasNext());
while (fields.hasNext()) {
Map.Entry<String, JsonNode> field = fields.next();
log.info("contains" + field.getKey() + " --- " + field.getValue());
if(field.getValue().isNull() && !field.getKey().equals("substitutionItems")) {
log.info("to remove " + field.getKey() + " --- " + field.getValue());
fields.remove();
}
else{
if(field.getValue().get("promotion") != null){
continue;
}else{
stripNulls(field.getValue());
}
}
}
}
但是这样做时fields.hasNext()返回 false。
我怎样才能达到预期的效果?