首页 > 解决方案 > powershell json打印父母和孩子

问题描述

鉴于:

$j = '{"name": "fred", "age":23, "children": [{"name": "sue", "age": 2},{"name": "Sally", "age": 3}]}'

我可以做这个:

> $f = ConvertFrom-Json -InputObject $j
> $f.children

name  age
----  ---
sue     2
Sally   3

我想要的是输出

> $f. #what goes here?

name  child  age
----  ---
fred  sue     2
fred  Sally   3

我该怎么做?

更新,试过这个:

> $child = @{label="child";expression={$_.children.name}}
> $age = @{label="age";expression={$_.children.age}}
> $f | select name, $child, $age

得到

name child        age
---- -----        ---
fred {sue, Sally} {2, 3}

不完全是我要找的。(我想要两行,每行一个孩子和父母的名字)

标签: jsonpowershell

解决方案


你的尝试很接近。我建议在密钥下迭代孩子:

foreach ($child in $f.children) {
    $f | Select-Object -Property @(
        'name'
        @{L='child'; E={ $child.name }}
        @{L='age';   E={ $child.age  }}
    )
}

没有循环的另一种方法:

$name = $f.name
$f.children | Select-Object -Property @(
    @{L='name';  E={ $name   }}
    @{L='child'; E={ $_.name }}
    'age'
)

最后,完全是另一种方法(基于这两种方法):

$name = $f.name
foreach ($child in $f.children) {
    [pscustomobject]@{
        name  = $name
        child = $child.name
        age   = $child.age
    }
}

推荐阅读