无法复制json块

时间:2017-11-21 17:40:59

标签: json powershell

我正在尝试使用下面的脚本将条件块从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

1 个答案:

答案 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'