arrays - 将 JSON 数组索引列值转换为行并导出为 CSV
问题描述
我有一个格式如下的 JSON 文件:
[
{
"id": "12345",
"name": "test_group",
"members":
[
{
"id": "11111",
"name": "test_member_1"
},
{
"id": "22222",
"name": "test_member_2"
},
{
"id": "33333",
"name": "test_member_3"
}
]
}
]
我的要求是将这些转换为以下格式/输出为 CSV:
groupId,groupName,memberId,memberName 12345,test_group,11111,test_member_1 12345,test_group,22222,test_member_2 12345,test_group,33333,test_member_3
我可以使用下面的代码在一列中将数组索引值作为连接字符串获取,但只需要上述格式的输出:
$jsonfile = 'C:\newjsonfile.json'
$outputcsv = 'C:\newcsvfile.csv'
$fields=@(
@{Name='groupId';Expression={$_.id}}
,@{Name='groupName';Expression={$_.name}}
,@{Name='memberId';Expression={$_.members.id, -join '|~|'}}
,@{Name='memberName';Expression={$_.members.name -join '|~|'}}
)
(Get-Content $jsonfile -Raw | ConvertFrom-Json) |
Select-Object -Property $fields |
Export-Csv $outputcsv -NoTypeInformation -Force
上述查询的 CSV 输出:
groupId、groupName、memberId、memberName ----- --------- -------- ---------- 12345,测试组,{11111 |~| 22222 |~| 33333},{test_member_1 |~| test_member_2 |~| test_member_3}
请帮助/建议在 PowerShell 中解决此查询。当前版本是:
PS C:\WINDOWS\system32> $PSVersionTable.PSVersion 主要次要版本修订 ----- ----- ----- -------- 5 1 17134 407
解决方案
您希望将来自父对象的信息与来自嵌套子对象的信息结合起来。为此,您需要将来自父级的信息存储在变量中,然后在处理子对象时将其注入:
(Get-Content $jsonfile -Raw | ConvertFrom-Json) | ForEach-Object {
$gid = $_.id
$name = $_.name
$_.members |
Select-Object @{n='groupId';e={$gid}},
@{n='groupName';e={$name}},
@{n='memberId';e={$_.id}},
@{n='memberName';e={$_.name}}
} | Export-Csv $outputcsv -NoType -Force