You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:45:16