PowerShell拆分CSV转JSON时如何给字段加方括号及添加根节点
PowerShell CSV拆分转指定格式JSON解决方案
问题对应解决逻辑
- 要让
AccountNumber输出为数组格式:在计算属性的表达式中把Account值用@()包裹为数组即可,ConvertTo-Json会自动识别为数组结构输出方括号 - 要添加根元素:将每批次处理后的条目数组作为
details属性的值,封装到自定义PS对象中再转换为JSON即可 ConvertTo-Json是完全合理的方案:PowerShell原生cmdlet会自动处理特殊字符转义、格式规范,比手动拼接字符串出错概率低,完全适配CSV字段编辑后转JSON的场景
修正后完整脚本
# 配置参数,可按需调整 $csvPath = "C:\Desktop\report.csv" $outputDir = "C:\Desktop\" $batchSize = 2 # 每批次拆分的行数 # 一次性导入所有CSV数据,避免循环中重复读取文件 $allCsvData = Import-Csv -Path $csvPath $totalRows = $allCsvData.Count $startRow = 0 $batchCounter = 1 while ($startRow -lt $totalRows) { # 提取当前批次数据,加工字段 $batchItems = $allCsvData | Select-Object -Skip $startRow -First $batchSize | ForEach-Object { [PSCustomObject]@{ NewName = "Append this value" + $_.Name AccountNumber = @($_.Account) # 包裹为数组,满足方括号输出要求 } } # 封装根元素 $outputObj = [PSCustomObject]@{ details = $batchItems } # 转换为JSON输出文件,指定编码和深度避免格式异常 $outputObj | ConvertTo-Json -Depth 3 | Out-File -Path (Join-Path $outputDir "r_$batchCounter.json") -Encoding utf8 $startRow += $batchSize $batchCounter++ }
额外优化说明
- 将批次行数单独提取为
$batchSize变量,后续调整拆分规则直接修改该参数即可 - 取消了原脚本中重复读取CSV的逻辑,一次性导入数据后按索引拆分,运行效率更高
- 新增
-Encoding utf8参数保证输出文件编码正确,避免特殊字符乱码 - 新增
-Depth 3参数避免ConvertTo-Json默认层级限制导致的内容截断
内容的提问来源于stack exchange,提问作者Amit Chouksey
相关产品推荐
相关产品推荐

