【问题标题】:powershell json print parent and childrenpowershell json打印父母和孩子
【发布时间】:2019-08-24 00:20:25
【问题描述】:

给定:

$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}

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

【问题讨论】:

  • 请参阅:Select-Object,尤其是文档中有关计算属性的部分。
  • 感谢我遵循了这个例子,但并不高兴。我更新了置顶帖

标签: json powershell


【解决方案1】:

您的尝试已接近尾声。我建议在 key 下迭代孩子:

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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多