json - POST的JSON有效负载以 “System.Collections.Hashtable”的形式发送,而不是实际数据

标签 json powershell post hash payload

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

我的问题是,当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' 

}

最佳答案

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

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

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

关于json - POST的JSON有效负载以 “System.Collections.Hashtable”的形式发送,而不是实际数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57149077/

相关文章:

java - Jackson JSON指针格式序列化

java - 如何在 Android API 级别 22 上通过 POST 请求发送 JSON raw

java - 将 json 的特定值传递给另一个 Activity

javascript - .NET 日期和 JSON

node.js - 关闭终端窗口后如何在 VSCode 中结束服务器

c# - .NET GetHostByAddress 别名只显示 8 个条目

powershell - 运行旧版本的 Windows PowerShell ISE

javascript - jQuery.post 并不总是发送表单数据

java - POST 请求得到 405 响应,而不是由 access-denied-handler 处理

ruby-on-rails - Rails 表单 - 如果未选中任何复选框,则参数不包含在 POST 中