展平 Powershell 对象中的子数组,包括父对象 属性
Flattening a Sub-Array in a Powershell Object, including parent object property
给出以下 JSON
[
{
"key": "James",
"things": [
{
"id": 123,
"name": "PRD"
},
{
"id": 124,
"name": "PRE"
}
]
},
{
"key": "Susan",
"things": [
{
"id": 125,
"name": "PRF"
},
{
"id": 126,
"name": "PRG"
}
]
}
]
其中,我很容易将其转换为 Powershell 对象:
$json = '[{"key":"James", "things":[{"id":123,"name":"PRD"},{"id":124,"name":"PRE"}]},{"key":"Susan", "things":[{"id":125,"name":"PRF"},{"id":126,"name":"PRG"}]}]'
$obj = $json | ConvertFrom-Json
如何展平子数组 things
并包含来自父对象的 key
,以便我的结果集是
key id name
--- -- ----
James 123 PRD
James 124 PRE
Susan 125 PRF
Susan 126 PRG
我使用了以下方法来展平子数组:
$obj | % { $_.things}
哪个returns我
id name
-- ----
123 PRD
124 PRE
125 PRF
126 PRG
但是,我不太清楚下一步该做什么。
如有任何帮助,我们将不胜感激。
您循环进入每个键,然后循环进入每个事物,因为您希望每个事物有 1 个结果,并使用当前键、ID 和名称构建一个 PSObject。
给你。
# initial code sample
$json = '[{"key":"James", "things":[{"id":123,"name":"PRD"},{"id":124,"name":"PRE"}]},{"key":"Susan", "things":[{"id":125,"name":"PRF"},{"id":126,"name":"PRG"}]}]'
$obj = $json | ConvertFrom-Json
# Loop needed to flatten the object.
foreach ($i in $obj) {
foreach ($t in $i.things) {
[PSCustomObject]@{
key = $i.key
id = $t.id
name = $t.name
}
}
}
输出
key id name
--- -- ----
James 123 PRD
James 124 PRE
Susan 125 PRF
Susan 126 PRG
您可以使用 built-in 扁平化与 select 如下:
($json | ConvertFrom-Json) | Select-Object key -ExpandProperty 东西
给出以下 JSON
[
{
"key": "James",
"things": [
{
"id": 123,
"name": "PRD"
},
{
"id": 124,
"name": "PRE"
}
]
},
{
"key": "Susan",
"things": [
{
"id": 125,
"name": "PRF"
},
{
"id": 126,
"name": "PRG"
}
]
}
]
其中,我很容易将其转换为 Powershell 对象:
$json = '[{"key":"James", "things":[{"id":123,"name":"PRD"},{"id":124,"name":"PRE"}]},{"key":"Susan", "things":[{"id":125,"name":"PRF"},{"id":126,"name":"PRG"}]}]'
$obj = $json | ConvertFrom-Json
如何展平子数组 things
并包含来自父对象的 key
,以便我的结果集是
key id name
--- -- ----
James 123 PRD
James 124 PRE
Susan 125 PRF
Susan 126 PRG
我使用了以下方法来展平子数组:
$obj | % { $_.things}
哪个returns我
id name
-- ----
123 PRD
124 PRE
125 PRF
126 PRG
但是,我不太清楚下一步该做什么。
如有任何帮助,我们将不胜感激。
您循环进入每个键,然后循环进入每个事物,因为您希望每个事物有 1 个结果,并使用当前键、ID 和名称构建一个 PSObject。
给你。
# initial code sample
$json = '[{"key":"James", "things":[{"id":123,"name":"PRD"},{"id":124,"name":"PRE"}]},{"key":"Susan", "things":[{"id":125,"name":"PRF"},{"id":126,"name":"PRG"}]}]'
$obj = $json | ConvertFrom-Json
# Loop needed to flatten the object.
foreach ($i in $obj) {
foreach ($t in $i.things) {
[PSCustomObject]@{
key = $i.key
id = $t.id
name = $t.name
}
}
}
输出
key id name
--- -- ----
James 123 PRD
James 124 PRE
Susan 125 PRF
Susan 126 PRG
您可以使用 built-in 扁平化与 select 如下:
($json | ConvertFrom-Json) | Select-Object key -ExpandProperty 东西