json - 在条件下添加到 JSON ($payload={})
问题描述
我将 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);
如果(条件),我想将其扩展如下(顺序很重要):
$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}
}]
}]
};
我不确定如何实现这一点。谁能提供智慧如何解决这个问题?
解决方案
您可以推入您在potentialAction
密钥中的数组引用。为此,您需要将其取消引用为数组。
my $payload = {
'@type' => 'MessageCard',
potentialAction => [{
name => "View Monitoring",
targets => [{
os => "default",
}]
}]
};
if ($maybe) {
push @{ $payload->{potentialAction} }, {
name => "Notes (Logs, Docs,..)",
targets => [{
os => "default",
}]
};
}
如果您的 Perl 版本是 5.24 或更高版本,您还可以使用postfix dereferencing,有些人觉得它更容易阅读。
push $payload->{potentialAction}->@*, ...
有关详细信息,请参阅perlref和perlreftut。
推荐阅读
- python - Django 要求在已经定义的情况下定义“模型”
- sql-server - SQL Server System.OutOfMemoryException + 太多结果
- intellij-idea - 重新格式化为单行
- jquery - 拖动元素并滚动到顶部使元素保持在其位置,但光标会改变位置
- r - RStudio EC2 上的 Sparklyr 调用错误 hadoopConfiguration 独立集群
- ios - imagePicker 似乎默认提供了一个压缩的视频文件?!是可定制的吗?(迅速)
- android - Android 导航架构组件 - 获取当前可见片段
- powerbi-embedded - 在横向和纵向之间切换时,Mobile Embedded PowerBI 未按预期调整大小(高度)
- c# - tinyMCE 下拉菜单与“添加超链接”模式断开连接
- php - SimpleSAMLphp 的 SessionHook?