PowerShell中移除JSON对象指定属性值的方法求助
解决ConvertFrom-Json生成对象移除属性的报错问题
问题场景
原始JSON结构:
{ "a": { "a1": { "a11":{}, "a12":{}, "a13":{} }, "a2": { "some other values" } }, "b": { "b1": { "another values" } } }
通过以下命令将JSON转为PowerShell对象存入变量$test:
$test = Get-Content $some_file_path | ConvertFrom-Json
需要移除a属性下a1中的a13属性,但执行以下命令时报错:
$test.a.PSObject.Properties["a1"].Remove("a13")
错误信息:
Method invocation failed because [System.Management.Automation.PSNoteProperty] does not contain a method named 'Remove'.
错误原因
你搞错了操作对象:$test.a.PSObject.Properties["a1"]获取的是a1这个属性本身(类型是PSNoteProperty),而不是a1对应的对象。PSNoteProperty没有Remove方法,自然会报错。
正确实现方法
方法1:直接移除目标属性
操作a1对应的对象的PSObject.Properties来移除a13:
$test.a.a1.PSObject.Properties.Remove("a13")
如果还需要移除a2属性,同理执行:
$test.a.PSObject.Properties.Remove("a2")
执行后可以用以下命令验证结果:
$test | ConvertTo-Json -Depth 10
方法2:重新构造对象(适合批量清理)
如果需要保留的属性较少,可以直接重新构造a属性的内容,只保留需要的部分:
$test.a = [PSCustomObject]@{ a1 = [PSCustomObject]@{ a11 = $test.a.a1.a11 a12 = $test.a.a1.a12 } }
这种方式更直观,也能一次性去掉不需要的a2属性。
内容的提问来源于stack exchange,提问作者Kate
相关产品推荐
相关产品推荐

