Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Logstash:如何在不知道keyname的情况下提取对象_Json_Ruby_Logstash - Fatal编程技术网

Json Logstash:如何在不知道keyname的情况下提取对象

Json Logstash:如何在不知道keyname的情况下提取对象,json,ruby,logstash,Json,Ruby,Logstash,我期望的输入JSON包含一个包含一些对象的字段。对象的键应该是随机的,所以我不能在logstash yml文件中指定它 示例JSON: { “根密钥”:{ “字段名”:{ “子字段”:“子字段值” } } } “FieldName”本身可以是输入中的任意随机字符串,因此相同的JSON在不同的事件中看起来可能是这样的- { “根密钥”:{ “SomeDifferentFieldName”:{ “子字段”:“子字段值” } } } 奇怪的是,“SubField”键名将是静态的 我想我可以做这样的

我期望的输入JSON包含一个包含一些对象的字段。对象的键应该是随机的,所以我不能在logstash yml文件中指定它

示例JSON:

{
“根密钥”:{
“字段名”:{
“子字段”:“子字段值”
}
}
}
“FieldName”本身可以是输入中的任意随机字符串,因此相同的JSON在不同的事件中看起来可能是这样的-

{
“根密钥”:{
“SomeDifferentFieldName”:{
“子字段”:“子字段值”
}
}
}
奇怪的是,“SubField”键名将是静态的

我想我可以做这样的事-

mutate{add_field=>{fieldValue=>“[RootKey][0][SubField]}}

但这似乎对数组而不是对象很有效。 任何其他表示都会出错- 例如

mutate{add_field=>{fieldValue=>“[RootKey][[SubField]]”}

mutate{add_field=>{fieldValue=>“[RootKey]{0}[SubField]”}


mutate{add_field=>{fieldValue=>“[RootKey]{}[SubField]”}

您需要使用ruby过滤器。试一试

ruby {
    code => '
        root = event.get("RootKey")
        if root
            root.each { |x|
                event.set("fieldValue", x["SubField"])
            }
        end
    '
}