非常初学的问题。我试图通过Powershell从JSON获取某些值。具体来说,我想列出服务: TEST00000 和 FAKE 。
当我运行下面的脚本时,我明白了:
TEST00000 FAKE
--------- ----
@{Enabled=True; Processed=2; Sent=3; Failed=4; Downloaded=5} @{Enabled=True}
如何获得仅有服务的列表?
更重要的是,我如何仅列出其中存在键/值 Enabled = True 的服务?
以下是代码:
$JSON = '{
"Envs": {
"DEV": {
"Services": {
"TEST00000": {
"Enabled": true,
"Processed": 2,
"Sent": 3,
"Failed": 4,
"Downloaded": 5
},
"FAKE": {
"Enabled": true
}
}
}
},
"Component": {
"Digger": {
"Envs": {
"DEV": {
"DownloadE": 4
}
}
}
}
}'
$jsonobj = ConvertFrom-Json -inputObject $JSON
$jsonobj.Envs.DEV.Services
答案 0 :(得分:3)
获取每个Services
属性的名称。您可以使用{27}之类的Get-Member
,也可以使用存储有关对象的有用信息的psobject
属性。
$ServiceNames = $jsonobj.Envs.DEV.Services.psobject.properties.name
获得名称后,您可以遍历它们并过滤子属性Enabled
$jsonobj.Envs.DEV.Services.psobject.properties.name | ForEach-Object {
$_ | Where-Object {$jsonobj.Envs.DEV.Services.$_.Enabled -eq $True}
}
答案 1 :(得分:1)
这应该允许您动态获取名称,而不管JSON中的服务名称是什么:
;
如果有什么不清楚,请告诉我,我可以更详细地解释 希望这可以帮助你。 快乐'炮轰!