我有一个从 API 中提取的 json,就像这样:
{
"LPEONASVVAP0": {
"LPEONASVVAP0": {
"id": "urn:vcloud:vm:f526d27d-e0f9-4d4f-ae81-4824e397c027",
"name": "LPEONASVVAP0",
"description": "_vm_desc_",
"dateCreated": "2021-04-06T14:56:09.640+0000"
}
},
"WDEONDSVDIS6": {
"WDEONDSVDIS6": {
"id": "urn:vcloud:vm:7ed43492-a7ce-4963-b5bb-5ec2ca89477c",
"name": "WDEONDSVDIS6",
"description": "",
"dateCreated": "2021-04-13T13:44:29.973+0000"
}
},
"WDEONASVSTR0": {
"WDEONASVSTR0": {
"id": "urn:vcloud:vm:7afa34fe-b239-4abe-90df-3f270b44db1f",
"name": "WDEONASVSTR0",
"description": "",
"dateCreated": "2021-03-10T16:17:50.947+0000"
}
},
}
我只需要提取字段 id、name 和 description 即可使用它们创建 csv。我对此进行了测试,但输出文件为空白:
$pathToJsonFile = x
$pathToOutputFile = x
$obj = Get-Content $pathToJsonFile -Raw | ConvertFrom-Json
print $obj
$obj | select id, name, description | Convertto-csv > $pathToOutputFile
答案 0 :(得分:1)
您需要通过 'LPEONASVVAP0'
隐藏成员集“发现”父属性名称(例如 psobject
)。由于外部和内部属性的命名相同,我们可以重新使用名称来获取内部属性值:
$obj.psobject.Properties |ForEach-Object {
$_.Value.$($_.Name)
} |Select id,name,description |Export-Csv -NoTypeInformation -Path $pathToOutputFile
答案 1 :(得分:1)
编辑:Mathias R. Jessens 的答案比这写得更好,我会这样做而不是我发布的方式。
好的,所以我复制了您发布的 json,并将其导入。由于每个信息数组都是这样存储的
"WDEONDSVDIS6": {
"WDEONDSVDIS6": {
我使用 get-member
迭代每个数组,然后从中选择信息。
此外,您不需要使用 Convertto-csv > $pathToOutputFile
,而是使用 export-csv
命令。
下面是我的代码,我会怎么做,可能有更好的方法,但这是有效的 :)
$pathToOutputFile = x.csv
$obj = Get-Content example.json -Raw| ConvertFrom-Json
$obj2 = ($obj | Get-Member -MemberType noteproperty).Name
$result = foreach($item in $obj2){
$obj.$item.$item | select id,name,description
}
$result | Export-Csv -Path $pathToOutputFile -Encoding utf8 -NoTypeInformation