使用Powershell从JSON获取值

时间:2017-12-22 16:41:10

标签: json powershell

非常初学的问题。我试图通过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

2 个答案:

答案 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中的服务名称是什么:

;

如果有什么不清楚,请告诉我,我可以更详细地解释 希望这可以帮助你。 快乐'炮轰!