如何递归地从JSON字符串中删除具有指定名称的某些字段?
例如,我想从下面的JSON中删除字段“secondName”:
输入:
{
"name" : "abc",
"secondName": "qwe",
"add" : "abcd",
"moreDetails" : {
"secondName": "qwe",
"age" : "099"
}
}
字符串
输出值:
{
"name" : "abc",
"add" : "abcd",
"moreDetails" : {
"age" : "099"
}
}
型
我必须从许多不同的JSON中删除一些具有不同结构/模式的字段,所以我将无法将POJO转换为POJO/从POJO序列化。
4条答案
按热度按时间bqujaahr1#
如果你知道模式和层次结构,你可以像下面这样做:
第一个月
更多信息Remove key from a Json inside a JsonObject
否则,你需要写一个动态函数,它将检查JSON对象的每个元素,并尝试找到其中的
secondName
元素并将其删除。因此,考虑到这里有多个嵌套对象,那么你需要编写一个函数,它将遍历每个元素并检查其类型,如果它再次是jsonObject,则递归地或迭代地调用相同的方法来检查当前元素,在每次检查中,你还需要验证键,如果它与必须删除的键匹配,那么你可以删除它并继续相同的操作。
有关如何检查JSON的值类型的提示,请参阅此How to check the type of a value from a JSONObject?
4ngedf3f2#
Gson将任何有效的Json转换为
LinkedTreeMap
,例如:字符串
然后它只是做一些递归方法来做清理:
型
使用方法:
型
mzaanser3#
您可以尝试将JSON存储为
JSONObject
,使用jsonObject.names()
删除键,并使用jsonObject.remove(key)
删除条目。icnyk63a4#
你可以在Jackson中使用
JsonNode.findParents(String fieldName)
方法轻松地完成这一任务。然后在每个父对象上调用ObjectNode.remove(String propertyName)
。最后,你将得到一个JsonNode,其中删除了给定字段名称的所有字段。字符串