powershell json对象用方括号

时间:2016-02-24 12:52:45

标签: json powershell

我导入了1个以上必须添加到json对象的电子邮件。 foreach循环检查电子邮件是否有效(代码未添加到此示例中)。当导入包含2个以上的情况时,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 []] $ id来解决类似的问题,但是我无法使用[string []]获得类似的代码。

1 个答案:

答案 0 :(得分:0)

如果您问我,这不太可能,因为您要声明一个包含单个项目的数组。 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,但是可以解决问题。