arrays - 将 JSON 数组索引列值转置为行并导出为 CSV

标签 arrays json powershell indexing export-to-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

I am able to get the array index values as concatenated strings in one column using below code, but need the output in above format only:

$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

最佳答案

您希望将来自父对象的信息与来自嵌套子对象的信息结合起来。为此,您需要将来自父级的信息存储在变量中,然后在处理子对象时将其注入(inject):

(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

关于arrays - 将 JSON 数组索引列值转置为行并导出为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53526852/

相关文章:

android - 如何根据 Json 对象设置颜色代码

java - Json/字符串/字节转换操作(发送字节到socket)

powershell - 如何在 Ubuntu 18.04 上将 Powershell Core 更新到最新版本

string - 如何将多个字符串参数传递给 PowerShell 脚本?

java - 有什么捷径可以获取 boolean 数组的绝对值吗?

python - 计算间隔之间的值数

javascript - 根据键值计算对象长度

iphone - 添加整数值作为数组的内容,iphone

android - 从微调器中删除重复值

powershell - 可以使用Write-Error或仅使用throw指定错误类型吗?