我正在使用PowerShell中的脚本来更新JSON数据,访问3层深度的修改数据。一般流程是:
$obj = Get-Content -Raw -Path $pathstring | ConvertFrom-Json
$obj.prop1.prop2.prop3.prop4 = "test"
$outjson = ConvertTo-Json -InputObject $obj -Depth 5
Set-Content -Path $pathstring -Value $outjson
当属性已存在时,此方法有效。但是,在某些情况下$obj.prop1.prop2.prop3.prop4
不存在。我想向PowerShell对象添加一系列嵌套属性,然后将其转换为JSON以创建它。
这可能/如何完成/是否有更好的方法将JSON值添加到PowerShell中的某些内容?
编辑:我正在运行
if(Get-Member -inputobject $js.prop1 -name "prop2" -Membertype Properties)
测试属性是否存在,如果prop2不存在,那么我需要创建所有属性。
答案 0 :(得分:1)
如果某个属性不存在,则需要添加该属性,否则无法为其指定值:
$obj.prop1.prop2.prop3 | Add-Member -Type NoteProperty -Name 'prop4' -Value 'test'
答案 1 :(得分:0)
我最近遇到了一个类似的问题,我需要向对象添加嵌套属性,因此我为此编写了一个递归函数。
- name: Show Databases
uri:
url: "http://localhost:8086/query"
user: admin
password: password
method: POST
body:
q: SHOW DATABASES
body_format: form-urlencoded
用法示例:
function Add-NoteProperty {
param(
$InputObject,
$Property,
$Value,
[switch]$Force
)
process {
[array]$path = $Property -split "\."
If ($Path.Count -gt 1) {
#go in to recursive mode
$Obj = New-Object PSCustomObject
Add-NoteProperty -InputObject $Obj -Property ($path[1..($path.count - 1)] -join ".") -Value $Value
}
else {
#last node
$Obj = $Value
}
$InputObject | Add-Member NoteProperty -Name $path[0] -Value $Obj -Force:$Force
}
}