将嵌套的JSON数组转换为CSV文件中的单独列

我有一个看起来像这样的JSON文件:

{

"id": 10011,

"title": "Test procedure",

"slug": "slug",

"url": "http://test.test",

"email": "test@test.com",

"link": "http://test.er",

"subject": "testing",

"level": 1,

"disciplines": [

"discipline_a",

"discipline_b",

"discipline_c"

],

"areas": [

"area_a",

"area_b"

]

},

我试图使用以下命令将其转换为CSV文件:

(Get-Content "PATH_TO\test.json" -Raw | ConvertFrom-Json)| Convertto-CSV -NoTypeInformation | Set-Content "PATH_TO\test.csv"

但是,对于学科和领域,我在生成的CSV文件中获取System.Object []。

有没有一种方法可以将所有这些嵌套值放在CSV文件中的单独列中,例如area_1,area_2等。对于学科也是如此。

回答:

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_TO\test.json' -Raw | ConvertFrom-Json)| Select-Object -Property $properties | Export-CSV -NoTypeInformation -Path 'PATH_TO\test.csv'

但是,我假设,disciplines并且areas每条记录的长度都是可变的。在这种情况下,您将必须遍历输入并获取学科和领域的最高计数值,然后动态构建属性数组:

$inputData = Get-Content 'PATH_TO\test.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_TO\test.csv'

该代码尚未经过全面测试,因此可能需要进行一些调整才能100%工作,但我认为这些想法很可靠=)

以上是 将嵌套的JSON数组转换为CSV文件中的单独列 的全部内容, 来源链接: utcz.com/qa/408200.html

回到顶部