【发布时间】:2021-11-20 17:54:15
【问题描述】:
这是我正在处理的 PowerShell 脚本:
$ArrayOfArguments = @("Param1", "Param2", "Param3")
$ArrayOfArgumentDescriptions = @("Description1", "Description2", "Description3")
$jsonData = @"
{
"foo": {
"des": "foo-des",
"par": [],
"sig": "foo-sig"
}
}
"@
$jsonParamData = @"
{
"des": "param-des",
"name": "param-name"
}
"@
$jsonObj = $jsonData | ConvertFrom-Json
$jsonParamObj = $jsonParamData | ConvertFrom-Json
# add param
for($i=0; $i -lt $ArrayOfArguments.count; $i++){
$jsonObj.foo.par += $jsonParamObj
$jsonObj.foo.par[$i].name = $ArrayOfArguments[$i]
$jsonObj.foo.par[$i].des = $ArrayOfArgumentDescriptions[$i]
}
$jsonResult = $jsonObj | ConvertTo-Json -Depth 5
Write-Host $jsonResult
此脚本的输出如下所示:
{
"foo": {
"des": "foo-des",
"par": [
{
"des": "Description3",
"name": "Param3"
},
{
"des": "Description3",
"name": "Param3"
},
{
"des": "Description3",
"name": "Param3"
}
],
"sig": "foo-sig"
}
}
根据我的脚本内容,我希望输出如下所示:
{
"foo": {
"des": "foo-des",
"par": [
{
"des": "Description1",
"name": "Param1"
},
{
"des": "Description2",
"name": "Param2"
},
{
"des": "Description3",
"name": "Param3"
}
],
"sig": "foo-sig"
}
}
似乎for 循环在每次迭代时都会覆盖数组中的 JSON 对象。为什么会发生这种情况,我该如何解决?
【问题讨论】:
-
Mathias 的有用回答解决了您眼前的问题;链接的副本还讨论了基于类的替代方案,并避免了使用
+=迭代构建数组的低效率
标签: json powershell