如何将数据从 CSV 转换为 JSON?

问题描述 投票:0回答:1

我有一个包含两个“列”

'User id'
'email'
的 CSV 示例:

User id,email
1234-1234-1234,[email protected]
321-1235-44432,[email protected]
322136231345,[email protected]

JSON 看起来像这样:

[{
        "externalId": "100000",
        "watchers": ["[email protected]", "[email protected]", "[email protected]"]
    }
]

我想做的是将 JSON 中的电子邮件地址相应地替换为 CSV 中的“用户 ID”。到目前为止,我在 foreach 代码中使用了低效的 foreach,但它仅替换了观察者数组中的第一封电子邮件。

$usersCSV = Import-Csv 'users.csv'
$watchersJSON = Get-Content -Path "watchers.json" -raw |ConvertFrom-Json

foreach ($watchersJSONdata in $watchersJSON) {
    foreach ($usersCSVdata in $usersCSV){
        if ($watchersJSONdata.watchers -eq $usersCSVdata.email) {
            $watchersJSONdata.watchers = $usersCSVdata.'User id'
        }
    }
} $watchersJSON |ConvertTo-Json | out-file  "watchers-with-ID.json"

结果是:

[{
        "externalId": "100000",
        "watchers": ["1234-1234-1234"]
    }
]

我仍在努力,但能提供一点帮助就太好了。

我不介意使用单行 jq 的完全不同的方法,但我根本不知道 jq。

json powershell csv jq converters
1个回答
0
投票

最简单、更有效的方法是使用

Group-Object -AsHashtable
:

$usersCSV = Import-Csv 'users.csv' | Group-Object email -AsHashTable
$watchersJSON = Get-Content -Path 'watchers.json' -Raw | ConvertFrom-Json
$watchersJSON[0].watchers = $usersCSV[$watchersJSON.watchers].'User id'
ConvertTo-Json @($watchersJSON) | Out-File 'watchers-with-ID.json'
© www.soinside.com 2019 - 2024. All rights reserved.