CSV转换/导出cmdlet无法“展平”对象,并且可能丢失了一些东西,但是我不知道如何使用内置cmdlet或功能来做到这一点。如果可以保证
disciplines并且
areas始终具有相同数量的元素,则可以通过
Select-Object与派生属性一起使用来对其进行琐碎处理:
$properties=@('id','title','slug','url','email','link','subject','level', @{Name='discipline_1';expression={$_.disciplines[0]}} @{Name='discipline_2';expression={$_.disciplines[1]}} @{Name='discipline_3';expression={$_.disciplines[2]}} @{Name='area_1';expression={$_.areas[0]}} @{Name='area_2';expression={$_.areas[1]}})(Get-Content 'PATH_TOtest.json' -Raw | ConvertFrom-Json)| Select-Object -Property $properties | Export-CSV -NoTypeInformation -Path 'PATH_TOtest.csv'但是,我假设,
disciplines并且
areas每条记录的长度都是可变的。在这种情况下,您将必须遍历输入并获取学科和领域的最高计数值,然后动态构建属性数组:
$inputData = Get-Content 'PATH_TOtest.json' -Raw | ConvertFrom-Json$counts = $inputData | Select-Object -Property @{Name='disciplineCount';expression={$_.disciplines.Count}},@{Name='areaCount';expression={$_.areas.count}}$maxDisciplines = $counts | Measure-Object -Maximum -Property disciplineCount | Select-Object -ExpandProperty Maximum$maxAreas = $counts | Measure-Object -Maximum -Property areaCount | Select-Object -ExpandProperty Maximum$properties=@('id','title','slug','url','email','link','subject','level')1..$maxDisciplines | % { $properties += @{Name="discipline_$_";expression=[scriptblock]::create("`$_.disciplines[$($_ - 1)]")}}1..$maxAreas | % { $properties += @{Name="area_$_";expression=[scriptblock]::create("`$_.areas[$($_ - 1)]")}}$inputData | Select-Object -Property $properties | Export-CSV -NoTypeInformation -Path 'PATH_TOtest.csv'该代码尚未经过全面测试,因此可能需要进行一些调整才能100%工作,但我认为这些想法很可靠=)



