json - POST 的 JSON 有效负载作为“System.Collections.Hashtable”而不是实际数据发送
问题描述
我正在使用 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'
}
解决方案
在这种情况下,您必须-Depth
在命令中使用值为 3 或更大的参数。ConvertTo-Json
$payload = $payload | ConvertTo-Json -Depth 3
默认情况下,该-Depth
参数设置为 2。该参数指定 JSON 表示中包含的包含对象的级别。您的示例中有三个级别。
推荐阅读
- r - 如果n = 1,如何使R跳过2:n循环?
- ios - 如何获取 iOS 设备应用计数?
- node.js - 每个字节读取一个nodejs缓冲区字节
- docker - 通过 docker-compose 公开 DNS 条目
- java - 无法使用 Java API 从 Google Cloud Storage 下载文件
- python - 使用带有字典值的 INSERT TO sql
- c - 使用 SDL_Rect 创建多个矩形
- android - android:elevation 不显示阴影
- python - TypeError: 'str' 对象在制作 peewee 模型时不可调用
- java - 如何在不引发编译错误的情况下更改不可变字符串值。