我在Powershell变量中具有以下JSON:
{
"Object1": {
"name": "asdf1",
"criteria": 2
},
"Object2": {
"name": "asdf2",
"criteria": 1
}
}
我想获取标准值为1的JSON。因此,结果应如下所示:{
"Object2": {
"name": "asdf2",
"criteria": 1
}
}
我尝试使用以下代码:$json | Get-ObjectMembers | Select-Object | where { $_.value.criteria -eq 1 };
虽然这基本上朝着正确的方向发展,但这并不是我想要的,因为结果看起来像这样:{
"name": "asdf2",
"criteria": 1
}
看到Object2
信息丢失了,并且一个深度级别丢失了。如上所示,我如何才能获得理想的结果?
最佳答案
本质上,您只希望保留单个输入对象中感兴趣的属性,或者换句话说,就是删除不感兴趣的属性。
这是PSv4 +解决方案:
$json = @'
{
"Object1": {
"name": "asdf1",
"criteria": 2
},
"Object2": {
"name": "asdf2",
"criteria": 1
}
}
'@
($json | ConvertFrom-Json).psobject.Properties.
Where({ $_.Value.criteria -eq 1 }).
ForEach({ [pscustomobject] @{ $_.Name = $_.Value } }) |
ConvertTo-Json
以上 yield :{
"Object2": {
"name": "asdf2",
"criteria": 1
}
}