我正在尝试使用下面的脚本将条件块从id 106复制到id 107;但是,我得到错误“ConvertFrom-Json:无效的JSON原语:”。我错过了什么吗?请指教。
$a = Get-Content 'C:\DevOps\mytest.json' -raw | ConvertFrom-Json
$condition = $a | select -expand environments | select -expand conditions
Write-Host $condition[0]
$a | add-member -Name $condition[1].name -value (Convertfrom-Json $condition[0]) -MemberType NoteProperty
Write-Host $update
$a | ConvertTo-Json -Depth 20 | set content 'C:\DevOps\updatedmytest.json'
JSON文件包含:
{
"source": "userInterface",
"id": 25,
"revision": 3,
"environments": [
{
"id": 106,
"conditions": [
{
"name": "ReleaseStarted",
"conditionType": "event",
"value": ""
}
]
},
{
"id": 107,
"conditions": [
]
}
]
}
最诚挚的问候,
Andy Pham
答案 0 :(得分:0)
您收到的错误消息是因为您将JSON转换为PowerShell对象,然后将其保存到变量$a
中。 $condition
然后仍然是您已扩展且不是JSON的PowerShell对象。因此,-value (Convertfrom-Json $condition[0])
无效,因为它已经转换。
转换为对象,直接对对象进行更改,从对象转换。
$ConvertedJSON = Get-Content 'C:\DevOps\mytest.json' -Raw | ConvertFrom-Json
$ConvertedJSON.environments[1].conditions = $ConvertedJSON.environments[0].conditions
$ConvertedJSON | ConvertTo-Json -Depth 20 | Set-Content 'C:\DevOps\updatedmytest.json'
或者,您可以使用Where-Object
来过滤ID。
$ConvertedJSON = Get-Content 'C:\DevOps\mytest.json' -Raw | ConvertFrom-Json
($ConvertedJSON.environments | Where-Object {$_.id -eq 107}).conditions = ($ConvertedJSON.environments | Where-Object {$_.id -eq 106}).conditions
$ConvertedJSON | ConvertTo-Json -Depth 20 | Set-Content 'C:\DevOps\updatedmytest.json'