如何使用PowerShell将嵌套JSON转换为逐行展开结构的CSV文件
嵌套结构JSON转CSV的PowerShell实现方案
原有代码的逻辑缺陷
你之前采用Select-Object搭配计算属性的写法,会把当前设备下Test数组的所有IP、Result值作为聚合内容塞到同一个对象的对应字段里,既不会自动拆分成独立行,也没法实现IP和Result逐位置一一匹配的效果。最终输出的对象字段携带数组结构,导出CSV时会把数组内容用分隔符拼接在同一个单元格内,和预期的逐行对应格式完全不符。
完整可运行实现
# 读取本地JSON文件并解析为PowerShell对象 $JsonData = Get-Content '.\Report_202104262250.json' -Raw | ConvertFrom-Json # 双层遍历完成嵌套结构扁平化 $FlatData = foreach ($deviceEntry in $JsonData) { # 遍历当前设备下的所有测试项,为每个测试项生成独立的扁平化对象 foreach ($testItem in $deviceEntry.Test) { [PSCustomObject]@{ Device = $deviceEntry.Device Test__IP = $testItem.IP Test__Result = $testItem.Result } } } # 将扁平化后的对象导出为标准CSV文件 $FlatData | Export-Csv -Path '.\converted_output.csv' -NoTypeInformation -Encoding UTF8
实际输出效果
代码运行后生成的CSV内容完全匹配你给出的预期格式:
Device,Test__IP,Test__Result Device1,10.20.3.6,Fail Device2,10.124.102.100,Fail Device2,107.12.13.51,Fail
实用提示:导出CSV时添加
-NoTypeInformation参数可以避免文件开头写入多余的.NET类型元数据,添加-Encoding UTF8可以保证文件内的中文内容不会出现乱码。
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

