【问题标题】:Powershell - Invoke-RestMethod - POST nested JSONPowershell - Invoke-RestMethod - POST 嵌套 JSON
【发布时间】:2021-05-27 08:41:26
【问题描述】:

我正在尝试与 API 交互以将一些数据发布到我们使用的服务,以便将一些电子邮件地址添加到策略中。这最终将获取一个电子邮件地址列表并为每个地址循环,但现在我只是想让它与单个地址一起工作。

我使用的是 Powershell 7,我会说我是 powershell 的中级,但这是我第一次尝试与 API 交互、使用 JSON 和使用 Invoke-RESTMethod 命令行开关。该服务的 API 参考显示了许多其他语言的代码示例,而不是 PS!

这是我遇到的问题。我正在尝试制定一个看起来是 3 个元素而不是两个元素的 -Body 语句。这是该示例语句在 CURL 中的样子:

{
  "custodians": [
    {
      "emailId": "john.doe@someorg.com"
    }
  ],
  "action": "add"
}

Action:Add 部分很好,很简单。我试图弄清楚如何正确格式化保管人部分。我不知道如何做 3 个元素而不是两个。我尝试了 {} [] 和 () 的不同组合,但无济于事:

"custodians" = ({"emailId" = "emailaddress@place.com"})

给我一​​个“赋值表达式无效”错误

"custodians" = [{"emailId" = "emailaddress@place.com"}]

"custodians" = [@{"emailId" = "emailaddress@place.com"}]

给我一​​个“'['后缺少类型名称。”错误。

这些,以及我输入的其他一些组合,都在 VSCode 中显示格式错误,所以我已经知道它们不起作用,我只是不知道为什么。我确定我只是没有破解@、{}、[] 或 () 的正确组合,但我似乎无法在网上找到任何信息(可能是因为我在搜索中没有使用正确的词汇或措辞)这显示了如何使用三个元素进行格式化。

如果它相关或有用,这里是我正在处理的整个查询的更大代码示例。假设 Auth 标头很好(到目前为止,我可以请求我的 auth 令牌并执行 GET 没有问题):

$headers = @{
    "Authorization" = $bearerAuthValue
    "Accept" = "application/json"
    "Content Type" = "application/json"
} 

$body = @{
    "custodians" = @(emailId = "emailaddress@place.com"),
    "Action" = "add"
}
$uri = "https://thisisanaddress.com"
Invoke-RestMethod -Method 'POST' -Uri $uri -Headers $headers -Body $body

【问题讨论】:

    标签: powershell powershell-7.0


    【解决方案1】:

    您正在考虑在保管人中拥有多个电子邮件 ID?

    $body = @{
        custodians = @(
            @{emailId = 'emailaddress@place.com' }
            @{emailId = 'emailaddress@place.com' }
            @{emailId = 'emailaddress@place.com' }
        )
        Action = 'add'
    }
    

    输出:

    $body | ConvertTo-Json
    
    {
      "Action": "add",
      "custodians": [
        {
          "emailId": "emailaddress@place.com"
        },
        {
          "emailId": "emailaddress@place.com"
        },
        {
          "emailId": "emailaddress@place.com"
        }
      ]
    }
    

    【讨论】:

    • 所以丹尼尔斯的回答似乎回答了我关于语法/格式的问题,因为我的代码不再对我尖叫。现在我在提交时收到“无效的 JSON 文档”错误,我确信这在技术上是一个单独的问题。
    • @Daniel 如果 custodians 是一个字符串数组,你会如何格式化它?例如:{ "action": "add", "custodians": ["cust1", "cust2"] }
    • @ΕГИІИО,基本相同。只需将每个 @{emailId = 'emailaddress@place.com' } 对象行替换为 'cust#' 字符串
    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 2015-02-04
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多