我有一个包含两个“列”
'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。
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'