如何将Foreach结果转为指定格式并从CSV生成目标JSON?
需求说明
我通过嵌套Foreach循环和If语句得到了每行单独显示的数字列表(示例如下),想把这些结果转换成包含"watchers"数组的字符串格式。更具体地说,我有一份包含user_id和ticket_id的CSV数据,需要用PowerShell编写脚本生成指定结构的JSON,把同一user_id对应的多个ticket_id整理成watchers数组。
示例数字列表
3 2824 28 6374 3887 198 1953 3827
期望的字符串格式
"watchers": ["3", "2824", "28", "6374", "3887", "198", "1953", "3827"],
CSV数据
user_id,ticket_id 253,24704 1257,24201 1257,17038 1257,22560 1257,22547 1925,24783 2452,24766 2452,24787 2453,24766 2453,24787
目标JSON结构
[{ "ticket_id": "253", "watchers": ["24704"] }, { "ticket_id": "1257", "watchers": ["24201", "17038","22560","22547"] }, { "ticket_id": "1925", "watchers": ["24783"] }, { "ticket_id": "2452", "watchers": ["24766","24787"] }, { "ticket_id": "2453", "watchers": ["24766","24787"] } ]
PowerShell解决方案
直接通过PowerShell的分组命令替代嵌套循环和判断,代码更简洁高效:
# 读取CSV文件,替换为你的实际文件路径 $csvData = Import-Csv -Path "你的CSV文件路径.csv" # 按user_id分组,转换为目标结构的对象数组 $result = $csvData | Group-Object -Property user_id | ForEach-Object { [PSCustomObject]@{ ticket_id = $_.Name watchers = $_.Group.ticket_id | ForEach-Object { [string]$_ } } } # 转换为JSON格式并输出,-Depth确保嵌套结构正常转换 $result | ConvertTo-Json -Depth 10
代码说明
Import-Csv:读取CSV内容并自动转为对象集合Group-Object user_id:将相同user_id的行归为一组ForEach-Object:遍历每个分组,生成包含ticket_id(即分组的user_id)和watchers数组(该分组下所有ticket_id)的自定义对象ConvertTo-Json:将对象数组转为指定格式的JSON
如果要单独处理示例中的数字列表生成watchers字符串,可使用以下代码:
# 数字列表可从文件读取:$numbers = Get-Content "数字文件路径.txt" $numbers = @("3", "2824", "28", "6374", "3887", "198", "1953", "3827") $watchersString = '"watchers": ["{0}"],' -f ($numbers -join '", "') Write-Output $watchersString
内容的提问来源于stack exchange,提问作者Nash
相关产品推荐
相关产品推荐

