首页 > 解决方案 > 具有多个数组的 PowerShell ConvertTo-JSON

问题描述

我正在尝试将数据转换为 JSON 作为 REST API 的输入。我面临的挑战是数据应该包含多个深度(因为缺少更好的词)。我现在使用的代码是:

(@{name = "Contoso"; all_assets = "false"; all_users="false"; rules= @{type="fqdn"; operator="match"; terms=@("contoso") } }| ConvertTo-Json)

现在的输出是:

{
    "all_users":  "false",
    "name":  "Contoso",
    "all_assets":  "false",
    "rules":  {
                  "operator":  "match",
                  "terms":  [
                                "contoso"
                            ],
                  "type":  "fqdn"
              }
}

REST-Api 抱怨数据包含无效字符。查看输出,“规则:”部分包含 {} 而不是 []。我一直在尝试各种技巧,但我似乎无法弄清楚这一点。

有人知道我在这里做错了什么吗?

标签: arraysjsonpowershellconvertto-json

解决方案


如果你想rules包含一个对象数组而不是一个具有属性的对象,请将所有进入ruleswith的内容括起来@()

因为termsthen 成为第 3 级,所以需要-Depth在 ConvertTo-Json cmdlet 中添加参数:

为了更好的可读性,我没有这样做

@{ 
   name       = "Contoso"
   all_assets = "false"
   all_users  = "false"
   rules      = @(
                   @{
                      type     = "fqdn"
                      operator = "match"
                      terms    = @("contoso")
                   }
                )
} | ConvertTo-Json -Depth 3

输出:

{
    "all_users":  "false",
    "name":  "Contoso",
    "all_assets":  "false",
    "rules":  [
                  {
                      "operator":  "match",
                      "terms":  [
                                    "contoso"
                                ],
                      "type":  "fqdn"
                  }
              ]
}

推荐阅读