我正在使用Powershell动态创建要打包的数据有效负载,并在REST API发布请求中发送。
我的问题是,当API接受它时,它会列为 System.Collections.Hashtable 。显然,我在数据格式化方面做错了事,但似乎对我没有任何作用。
API接收方式如下
{
"properties": {
"recip_test": [
"System.Collections.Hashtable",
"System.Collections.Hashtable"
],
"offending_shifts": "MAX, OnCall-Default Shift",
"group_name": "Alarmpoint Administrators"
}
}
我已经尝试过 ConvertTo-Json 以及 + =()/ .Add(),但这些方法似乎都不起作用。
我正在遍历一个数据数组,这些数据代表该数组中的ID。对于该数组中的每个项目(循环中),我需要制作一个看起来像这样的哈希表,
$recipient = @{
'id' = $y
'recipientType' = 'PERSON'
}
然后使用该哈希并将其铲入收件人的有效负载字段中,然后需要在POST请求中将其传递。下面是完整的代码。
foreach($x in $collated_group_data) {
if ($x.group_name -ne 'Alarmpoint Administrators') {
next
}
$uuid = "***********/triggers?apiKey=**************"
$webhook_path = "$base/api/integration/1/functions/$uuid"
$payload = @{
'properties' = @{
'group_name' = $x.group_name
'offending_shifts' = $x.offending_shifts.Substring(0, $x.offending_shifts.Length - 2)
'recipients' = @()
}
}
foreach($y in $x.supervisor_ids) {
$payload.properties.recipients += @{'id' = $y; 'recipientType' = 'PERSON'}
}
$payload = $payload | ConvertTo-Json
Invoke-WebRequest -Uri $webhook_path -Method POST -Body $payload -ContentType 'application/json'
}
答案 0 :(得分:3)
在这种情况下,必须在-Depth
命令中使用值为{3或更大的ConvertTo-Json
参数。
$payload = $payload | ConvertTo-Json -Depth 3
默认情况下,-Depth
参数设置为2。该参数指定JSON表示形式中包含多少级所包含的对象。您的示例中有三个级别。