我正在编写一个方法来手动删除json(LinkedTreeMap)中的空值。
private static Gson gson = new Gson();
public static LinkedTreeMap removeNullJsonObjects(Object object) {
JsonElement jsonElement = gson.toJsonTree(object);
LinkedTreeMap<Object, Object> linkedTreeMap = gson.fromJson(jsonElement, LinkedTreeMap.class);
for (var entry : linkedTreeMap.entrySet()) {
Object value = entry.getValue();
if (value == null) {
linkedTreeMap.remove(entry.getKey());
} else if (value instanceof LinkedTreeMap<?, ?>) {
removeNullJsonObjects(value);
// here I need to loop again and save somehow result before ??
}
}
return linkedTreeMap;
}
但问题是json的深度可以是0...n。这意味着我应该循环N次并存储它,我不知道如何为它编写代码。
所以我可以有任何深度的json,例如:就像这样:
{
"technicalData": {
"attributesList": {
"attributes": [{
"attribute": {
"code": "LocalModelName",
"description": {
"value": "Boer"
}
}
}, {
"attribute": {
"code": "C303"
}
}
]
}
},
"modelGroups": {
"modelGroup": [{}
]
}
}
1条答案
按热度按时间fsi0uk1n1#
您在实施中遇到的一些问题:
linkedTreeMap.remove
可能导致ConcurrentModificationException
1.当值为List时,我们还应该检查其元素是否为Map,并相应地删除空值条目。
1.移除逻辑应提取到方法中,无需再次将
Map
转换为JsonElement
。下面的代码在Java 16上运行。