有没有一种有效的方法可以“向后”或自底向上遍历一个有很多嵌套的json文件?我需要从一个嵌套很重的json字符串中删除所有空字段,但由于我当前的逻辑看起来是自顶向下的,它只删除了最底层的空字段。
我的数据如下所示:
{
"rule": {
"description": "authentication_failed",
"category": {
"action": "denied"
}
},
"tls": {
"client": {
"certificate": {
"subject": "-"
}
},
"server": {
"certificate": {
"subject": "-"
}
}
}
}
我目前的代码如下,其中“event”是json对象:
def removeEmptyFields(event,h,name)
h.each do |k,v|
if (v.is_a?(Hash) || v.is_a?(Array)) && v.to_s != '{}'
removeEmptyFields(event,v,String.new(name.to_s) << '[' << k.to_s << ']')
else
if v == '' || v == '-' || v == 'none' || v.to_s == '{}'
event.remove(String.new(name.to_s) << '[' << k.to_s << ']')
end
end
end
end
removeEmptyFields event,event.to_hash,''
我当前的数据输出(如下)并不理想。我最好的结果是如果“tls”字段被一起删除。考虑到我的代码当前遍历json的方式,我还不能让循环变量工作。
{
"rule": {
"description": "authentication_failed",
"category": {
"action": "denied"
}
},
"tls": {
"client": {
"certificate": {}
},
"server": {
"certificate": {}
}
}
}
1条答案
按热度按时间70gysomp1#
我想我得到了你想要的输出,我只是用你的例子试了一下,所以如果我有什么错的话,请随时告诉我。希望它能有所帮助!