我导入了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 []]获得类似的代码。
答案 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,但是可以解决问题。