我有一个广泛的以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
        '
    }

10-01 17:15