【问题标题】:powershell json object with square brackets带有方括号的powershell json对象
【发布时间】:2018-10-04 21:57:33
【问题描述】:

我导入了 1+ 封电子邮件,这些电子邮件必须添加到 json 对象中。 foreach 循环检查电子邮件是否有效(代码未添加到此示例中)。当import包含2+case时,json对象的格式正确:

[
{
    "Name":  "John Doe",
    "Email":  "email@gmail.com"
},
{
    "Name":  "Jane Doe",
    "Email":  "email@live.com"
}
]

即,方括号与花括号中的每个对象,用逗号分隔。 但是当 foreach 循环只返回 1 封有效邮件时,格式变为:

{
    "Name":  "John Doe",
    "Email":  "email@gmail.com"
}

这是我正在运行的代码:

        $body = foreach($row in $mailinglistimp) 
                             {                             
                                 @{
                                 Email=$row.EPOSTADR 
                                 Name=$row.KUNDE_NM
                                 }
                              }
        $body_json = ConvertTo-json $body

如何在 foreach 循环中仅使用一项来强制对象看起来像这样?

[
{
    "Name":  "John Doe",
    "Email":  "email@gmail.com"
},
]

在相关说明中,通过在另一个 json 对象中使用 [int[]] $ids 解决了类似的问题,但我无法使用 [string[]] 获得类似的代码。

【问题讨论】:

  • $body = @( foreach(...){...} )
  • 太棒了!这似乎解决了我的问题。知道它必须是简单的东西

标签: json powershell


【解决方案1】:

如果您问我,这不太可能,因为您想声明一个包含单个项目的数组。 PowerShell 将始终将此视为单个项目,并且不会添加方括号(JSON 的数组声明)。但是当我编写脚本来更新 TOPdesk 中的更改时,我遇到了同样的问题。所以这可能会帮助某人。

$requestObject = @()
$action = "Buy a new laptop"
$status = "Rejected"
    if($Action){
        $requestObject += @{
            op = "add"
            path = "/progressTrail"
            value = $Action
        }
    }

    if($Status){
        $requestObject += @{
            op = "replace"
            path = "/status"
            value = $Status
        }
    }

    if($requestObject){
        if($requestObject.Count -eq 1){
            $requestBody = "[$($requestObject | ConvertTo-Json)]"
        }else{
            $requestBody = $requestObject | ConvertTo-Json
        }
}

生成以下输出:

[
{
    "path":  "/progressTrail",
    "op":  "add",
    "value":  "Buy a new laptop"
},
{
    "path":  "/status",
    "op":  "replace",
    "value":  "Rejected"
}

]

现在,例如,如果您将 $status 留空,您将获得以下信息:

   [{
    "path":  "/progressTrail",
    "op":  "add",
    "value":  "Buy a new laptop"
}]

请注意,当我的数组中只有一项 ($requestObject.Count -eq 1) 时,我强制使用方括号。这不是很好的 imo,但可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2013-10-11
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多