Windows PowerShell中JSON转CSV遇System.Object[]问题求助
解决PowerShell将嵌套数组JSON转换为CSV的问题
嘿,折腾了3天肯定够闹心的!你的JSON结构有点特殊——它是一个包含二维数组的对象,直接用ConvertFrom-Json接Export-Csv肯定行不通,因为Export-Csv需要的是带属性的PowerShell对象,而不是纯数组列表。我来帮你搞定这个转换:
问题分析
你的JSON里,inputFile是一个二维数组:
- 第一个子数组是CSV的表头(Column1到Column10)
- 后面的子数组是对应的数据行
所以核心是把这些数组转换成PowerShell能识别的自定义对象,再导出成CSV。
完整解决方案代码
# 读取并解析JSON文件(替换成你的实际文件路径) $jsonData = Get-Content 'path.json' -Raw | ConvertFrom-Json # 提取表头和数据行 $columnHeaders = $jsonData.inputFile[0] $dataRows = $jsonData.inputFile | Select-Object -Skip 1 # 将每一行数据转换为带表头属性的自定义对象 $csvEntries = $dataRows | ForEach-Object { $currentRow = $_ $entry = [PSCustomObject]@{} # 遍历表头,给对象添加对应属性和值 for ($i = 0; $i -lt $columnHeaders.Count; $i++) { $entry | Add-Member -MemberType NoteProperty -Name $columnHeaders[$i] -Value $currentRow[$i] } $entry } # 导出到CSV文件(替换成你想要的输出路径) $csvEntries | Export-Csv -Path 'output.csv' -NoTypeInformation -Encoding UTF8
代码说明
- 读取解析JSON:
Get-Content -Raw确保一次性读取整个JSON文件,避免换行问题,再用ConvertFrom-Json转成PowerShell对象。 - 分离表头和数据:
$jsonData.inputFile[0]取第一个数组作为表头,Select-Object -Skip 1跳过表头,剩下的都是数据行。 - 转换为自定义对象:遍历每一行数据,创建
PSCustomObject,然后根据表头给对象添加对应的属性和值——这一步是让Export-Csv能正确识别列的关键。 - 导出CSV:
-NoTypeInformation会去掉CSV开头的PowerShell类型注释,-Encoding UTF8保证导出的文件编码正确。
运行这段代码后,你就能得到一个标准的CSV文件,包含正确的表头和两行数据啦!
内容的提问来源于stack exchange,提问作者swhat
相关产品推荐
相关产品推荐

