JSON POST 的有效负载作为 "System.Collections.Hashtable" 而不是实际数据发送

JSON payload for POST sent as "System.Collections.Hashtable" instead of actual data

我正在使用 Powershell 动态创建要打包并在 REST API Post 请求中发送的数据负载。

我的问题是,当它被 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() 但是 none 其中似乎有效。

我正在遍历代表该数组中 ID 的数据数组。对于该数组中的每个项目(在循环中),我需要制作一个散列 table 看起来像这样,

$recipient = @{
  'id' = $y
  'recipientType' = 'PERSON'
}

然后获取该哈希并将其铲入 recipients 的有效负载字段,然后需要在 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' 

}

在这种情况下,您必须在 ConvertTo-Json 命令中使用值为 3 或更大的 -Depth 参数。

$payload = $payload | ConvertTo-Json -Depth 3

默认情况下,-Depth 参数设置为 2。该参数指定在 JSON 表示中包含多少层包含对象。您的示例中有三个级别。