如何在PowerShell中按repeat字段重复行将列表转为CSV
解决PowerShell按repeat属性重复行生成CSV的问题
要实现按repeat属性值重复对应行的需求,核心思路是为每个数据对象生成指定次数的重复输出,再统一转换为CSV。以下是具体实现:
完整代码示例
$str = '[ {"attrs": { "id": "A", "repeat": 2}}, {"attrs": { "id": "B", "repeat": 3}} ]' $json = $str | ConvertFrom-Json # 生成重复的对象集合 $repeatedItems = $json | ForEach-Object { $attrs = $_.attrs # 根据repeat值循环输出当前对象 1..$attrs.repeat | ForEach-Object { $attrs } } # 转换为目标CSV格式 $repeatedItems | ConvertTo-Csv -NoTypeInformation -UseQuotes AsNeeded
代码说明
- 遍历JSON对象:先将JSON字符串转换为PowerShell对象,然后逐个取出每个对象的
attrs属性; - 生成重复对象:利用
1..$attrs.repeat创建一个从1到repeat数值的序列,遍历该序列时每次输出当前的attrs对象,这样就得到了重复指定次数的对象集合; - 转换为CSV:将重复后的对象集合整体转换为CSV,即可得到每行对应repeat次数的结果。
流式处理(类似Generator特性)
如果处理的数据量较大,不想一次性生成所有重复对象,可以直接用管道流式处理,避免占用过多内存:
$str = '[ {"attrs": { "id": "A", "repeat": 2}}, {"attrs": { "id": "B", "repeat": 3}} ]' $str | ConvertFrom-Json | ForEach-Object { $attrs = $_.attrs 1..$attrs.repeat | ForEach-Object { $attrs } } | ConvertTo-Csv -NoTypeInformation -UseQuotes AsNeeded
这段代码会在管道中逐次处理每个对象并生成重复项,无需预先存储所有结果,更接近你提到的generator延迟生成特性。
内容的提问来源于stack exchange,提问作者ca9163d9
相关产品推荐
相关产品推荐

