Invoke-RestMethod 未正确传递有效负载中的 System.Object[] 字段

Invoke-RestMethod not passing System.Object[] field in the payload correctly

json 有效负载如下所示:

{
  "clients": [
    {
      "scope": "scope1",
      "claim": "scope1",
      "id": ["123", "567"]
    },
    {
      "scope": "scope2",
      "claim": "claim2",
      "id": ["321", "765"]
    }
  ]
}
> $inputjson = (((get-content .\inputfile.json) -Join " " ) | convertfrom-json )

> echo $inputjson

 clients                                                                               
 -------                                                                 
 {@{scope=scope1; claim=scope1; id=System.Object[]}, @{scope=scope2; claim=claim2; id=System.Object[]}}

能够通过访问 $inputjson.clients[0].id 查看 id 值,但是在 $inputjson 中使用 id=System.Object[] 的有效载荷,API 不认识它。我正在使用 Invoke-RestMethod 到 POST 有效载荷到 API。

知道如何解析有效负载中的 id=System.Object[],以便 API 正确识别它吗?

顺便说一句,API 使用 cURL 命令识别相同的输入 json(原样)。

不是使用 ConvertFrom-Json cmdlet 和 posting .NET 对象将 JSON 转换为 .NET 对象,您可以 post 普通 JSON像这样:

$myJson = @"
{
  "clients": [
    {
      "scope": "scope1",
      "claim": "scope1",
      "id": ["123", "567"]
    },
    {
      "scope": "scope2",
      "claim": "claim2",
      "id": ["321", "765"]
    }
  ]
}
"@
Invoke-RestMethod -Uri "" -Method Post -Body $myJson -ContentType "application/json"

如果您想处理从文件中读取的 JSON,在 post 处理它之前,您可以像以前那样转换它并将其转换回普通 JSON.根据您的 PowerShell 版本,在从 JSON.

转换或转换为

时,您可能需要使用 -Depth 参数