Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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($payload={})_Json_Perl_Nagios - Fatal编程技术网

根据条件添加到JSON($payload={})

根据条件添加到JSON($payload={}),json,perl,nagios,Json,Perl,Nagios,我将JSON提供给某个webhook以触发通知(M$Teams)。这很有效。但是,我想扩展我的Perl脚本:我需要在特定条件下向“messagecard”构造添加一个新节点 例如,我将其定义为: my $payload={}; $payload = { '@type' => 'MessageCard', '@context' => 'http://schema.org/extensions', themeColor => $event{COLOR},

我将JSON提供给某个webhook以触发通知(M$Teams)。这很有效。但是,我想扩展我的Perl脚本:我需要在特定条件下向“messagecard”构造添加一个新节点

例如,我将其定义为:

my $payload={};
$payload = {
    '@type' => 'MessageCard',
    '@context' => 'http://schema.org/extensions',
    themeColor => $event{COLOR},
    text => $event{SERVICEOUTPUT},
    sections => [{
        facts => [{
            name => 'Type',
            value => "$event{NOTIFICATIONTYPE} $event{ADDITIONALINFO}"
        },
        ]
    }],
    potentialAction => [{
        '@type' => "OpenUri",
        name => "View Monitoring",
        targets => [{
            os => "default",
            uri => $naemon_url
        }]
    }]
};

$ua = LWP::UserAgent->new;
my $req = POST($opt_webhook
    , 'Content-Type' => 'application/json; charset=UTF-8'
    , 'Content' => encode_json($payload)
);
my $resp = $ua->request($req);
如果(条件),我想扩展如下(顺序很重要):


我不确定如何才能做到这一点。任何人都可以提供解决此问题的智慧吗?

您可以将
潜在动作
键中的数组引用推入。为此,需要将其作为数组取消引用

my$payload={
“@type'=>“MessageCard”,
潜在作用=>[{
name=>“视图监视”,
目标=>[{
os=>“默认值”,
}]
}]
};
如果($可能){
推送{$payload->{potentialAction}{
名称=>“注释(日志、文档等)”,
目标=>[{
os=>“默认值”,
}]
};
}
如果您的Perl版本是5.24或更高版本,您也可以使用,有些人认为这更容易阅读

push$payload->{potentialAction}->@*。。。

有关更多信息,请参阅和。

是否已启用
使用严格的
使用警告
?您的
$ua
未声明。@simbabque是的,这只是当前代码的摘录
$payload = {
    '@type' => 'MessageCard',
    '@context' => 'http://schema.org/extensions',
    themeColor => $event{COLOR},
    text => $event{SERVICEOUTPUT},
    sections => [{
        facts => [{
            name => 'Type',
            value => "$event{NOTIFICATIONTYPE} $event{ADDITIONALINFO}"
        },
        ]
    }],
    potentialAction => [{
        '@type' => "OpenUri",
        name => "View Monitoring",
        targets => [{
            os => "default",
            uri => $naemon_url
        }]
    },
    {
        '@type' => "OpenUri",
        name => "Notes (Logs, Docs,..)",
        targets => [{
            os => "default",
            uri => $event{SERVICENOTESURL}
        }]
  }]
};