Arrays PowerShell使用多个数组转换为JSON

Arrays PowerShell使用多个数组转换为JSON,arrays,json,powershell,convertto-json,Arrays,Json,Powershell,Convertto Json,我正在尝试将数据转换为JSON作为RESTAPI的输入。我面临的挑战是数据应该包含多个深度(因为缺少更好的词汇)。我现在使用的代码是: (@{name = "Contoso"; all_assets = "false"; all_users="false"; rules= @{type="fqdn"; operator="match"; terms=@("contoso") } }| ConvertTo-Json) 现在的输出是: { "all_users": "false",

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

(@{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"
              }
}
RESTAPI抱怨数据包含无效字符。查看输出,“规则:”部分包含{},而不是[]。我一直在尝试各种各样的把戏,但我似乎弄不懂这个


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

如果希望
规则
包含一个对象数组而不是一个具有属性的对象,请使用
@()
规则
中的所有内容括起来

由于
terms
随后成为第三级,因此需要将参数
-Depth
添加到ConvertTo Json cmdlet:

为了更好的可读性,我没有把它作为一行

输出:

为了它的价值…
这不是问题的答案,而是您通常如何使用cmdlet从
Json
文件构建PowerShell表达式:


谢谢西奥!您给出的代码示例似乎给出了正确的输出。但是,当将它与Invoke rest方法一起使用时,我仍然会遇到以下错误:{“error”:“无效的JSON:第1行第11列的意外字符”}不知道这里会出什么问题。我比较了Tenable在其API访问站点上的json数据示例,结果看起来完全一样。@MichaelWaterman奇怪得很。。。如果发送json命令,会发生什么?为此,请使用
converttojson-Depth 3-Compress
相同的错误消息。我做了一些测试。如果我创建了一个变量$body,它的代码与-body后面的代码完全相同,那么用变量$body替换原始代码,它就可以工作了。我几乎怀疑这里有计时问题。@MichaelWaterman您没有展示如何使用json作为主体调用
Invoke rest方法。将其存储在变量中始终确保json是完整的,否则,您可以将代码放在圆括号中以确保相同。(首先将其存储在变量中会使代码更具可读性)我也得出了这个结论。谢谢你的帮助提奥,谢谢。这能回答你的问题吗?
@{ 
   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"
                  }
              ]
}
'{
    "all_users":  "false",
    "name":  "Contoso",
    "all_assets":  "false",
    "rules":  [
                  {
                      "operator":  "match",
                      "terms":  [
                                    "contoso"
                                ],
                      "type":  "fqdn"
                  }
              ]
}' | ConvertFrom-Json | ConvertTo-Expression

[pscustomobject]@{
        'all_users' = 'false'
        'name' = 'Contoso'
        'all_assets' = 'false'
        'rules' = ,[pscustomobject]@{
                'operator' = 'match'
                'terms' = ,'contoso'
                'type' = 'fqdn'
        }
}