在运行时从JSON对象中提取值

时间:2016-02-23 00:44:09

标签: json powershell

我是PowerShell的新手我正试图弄清楚如何在PowerShell中迭代JSON对象并提取值。

我在文件WIMS.JSON中有一个JSON对象

{ WIMS:{
    A:{drive:"A"},
    B:{drive:"Z"}
}}

我想迭代WIMS中的对象,即A和B,并在循环中选择不同的驱动器号。

我已经能够找出如何使用

获取对象名称(可能很难看)
$json = (Get-Content "WIMS.json" -Raw) | ConvertFrom-Json
$WIMS = $json.WIMS
$wimNames=$($WIMS| Get-Member -MemberType *Property).Name 
for ($i=0; $i -lt $wimNames.count; $i++) {
    write-host ("Property names are: " + $wimNames[$i])
    $object=$WIMS| select $wimNames[$i]   #does not work
    $object.drive  #does not work
}

但是我无法弄清楚如何提取对象以便我可以访问这些字段。

任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

你正走在正确的轨道上。将Select-Object-Expand参数一起使用可以获得您想要的效果。

$wimNames | ForEach-Object {
    $object = $WIMS | Select-Object -Expand $_
    $object.drive 
}

$wimNames | ForEach-Object { $WIMS | Select-Object -Expand $_ | ForEach-Object { $_.drive } }

答案 1 :(得分:1)

有一个内置的cmdlet convert-fromjson

    $js = @"

    { WIMS:{
        A:{drive:"A"},
        B:{drive:"Z"}
    }}


    "@

    $jsobj = $js | ConvertFrom-Json
    $jsobj.WIMS.A