Logstash 过滤掉嵌套 json 数组中键的空值
Logstash filter out values with null values for a key in a nested json array
我有一个相当广泛的 Logstash 管道,以 Json 结尾:
{
"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 所指出的,您可以使用 reject 创建不包含 [key] 为 null 的条目的数组副本。您必须使用 event.set 覆盖 [arrayKey]
的初始值
ruby {
code => '
a = event.get("arrayKey")
if a
event.set("arrayKey", a.reject { |x| x["key"] == nil })
end
'
}
我有一个相当广泛的 Logstash 管道,以 Json 结尾:
{
"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 所指出的,您可以使用 reject 创建不包含 [key] 为 null 的条目的数组副本。您必须使用 event.set 覆盖 [arrayKey]
的初始值 ruby {
code => '
a = event.get("arrayKey")
if a
event.set("arrayKey", a.reject { |x| x["key"] == nil })
end
'
}