在Logstash中,我有一个JSON有效负载,我已按如此解码:
filter
{
json
{
source => "payload"
target => "payloadData"
}
}
现在我想检查payloadData._extraData是否存在,然后再反序列化。
我尝试过这种方法,使用this related question中给出的示例:
filter
{
json
{
source => "payload"
target => "payloadData"
}
if [payloadData._extraData] =~ /.+/
{
sourcce => "payloadData._extraData"
target => "payloadData.extraData"
}
}
但它没有做任何事情(没有崩溃,没有错误信息,只是没有做任何事情)
答案 0 :(得分:7)
正确的语法是:
if [payloadData][_extraData] =~ /.+/ { }
示例输入:
{"foo":"bar","spam":"eggs","abc":"xyz","one":"two","three":"four","five":"six","seven":{"eight":"nine"}}
<强>配置:强>
filter {
json { source => message }
if [seven][eight] =~ /.+/ {
# do something
}
}
除此之外, if语句中的代码不做任何事情。您需要指定应执行的过滤器。 e.g:
if [payloadData][_extraData] =~ /.+/ {
json {
source => "payloadData[_extraData]"
target => "payloadData[extraData]"
}
}
您想在if语句中反序列化什么?第一个json过滤器应该识别嵌套对象。