我有一个广泛的以Json结尾的Logstash管道,如下所示:
{
"keyA": 1,
"keyB": "sample",
"arrayKey": [
{
"key": "data"
},
{
"key": null
}
]
}
我要实现的是过滤
"arrayKey"
并删除其中的对象,其中"key"
的值为null
。试过这个没有运气:
filter {
ruby {
code => "
event.get('arrayKey').each do |key|
[key].delete_if do |keyCandidate|
if [keyCandidate][key] != nil
true
end
end
end
"
}
}
这不会从| hash |:| Int |中找到隐式转换器。错误。我该如何实现?有没有更简单的方法可以做到这一点?
最佳答案
正如Aleksei指出的那样,您可以使用拒绝创建不包含[key]为null的条目的数组副本。您必须使用event.set覆盖[arrayKey]的初始值
ruby {
code => '
a = event.get("arrayKey")
if a
event.set("arrayKey", a.reject { |x| x["key"] == nil })
end
'
}