【发布时间】:2022-01-15 08:43:38
【问题描述】:
我有一个相当奇特的嵌套 JSON,在某些情况下,键值对正常出现,但在其他情况下,键的类型出现在进一步的嵌套中。
{"metadata":{"systemId":"da1895","legalEntity":"A0"},"recordContent":{"positionDate":"2019-04-08 00:00:00.0","account":{"string":"G32"},"seg":{"string":"S"},"strike":{"double":4.4}}}
{"metadata":{"systemId":"45364d","legalEntity":"5G"},"recordContent":{"positionDate":"2019-04-08 00:00:00.0","account":{"string":"G81"},"seg":{"string":"S"},"strike":{"double":5.0}}}
在示例中您可以看到metadata 的字段是简单的键值对,但在recordContent 下方,我们有positionDate,这是一个简单的键值,但"account":{"string":"G32"} 和"strike":{"double":4.4} 不是.
我想放弃类型信息并得到如下的 CSV 结构:
systemId, legalEntity, positionDate, account,seg,strike
da1895, A0, 2019-04-08 00:00:00.0,G32, S, 4.4
4536d, 5G, 2019-04-08 00:00:00.0,G81, S, 5.0
关于如何使用 Powershell 将这种结构转换为 CSV 的任何想法?
这是我尝试过的:
$TemplateParametersFile = "c:\data\output.json"
$JsonParameters = Get-Content $TemplateParametersFile | ConvertFrom-Json
$metadatafields = $JsonParameters.metadata[0].PSObject.Properties.Name
$recordcontentfields = $JsonParameters.recordContent[0].PsObject.Properties.Name
$oData = New-Object PSObject
$metadatafields |
ForEach {
Add-Member -InputObject $oData -NotePropertyName ($_) -NotePropertyValue $JsonParameters.metadata.($_)
}
$recordcontentfields |
ForEach {
Add-Member -InputObject $oData -NotePropertyName ($_) -NotePropertyValue $JsonParameters.recordContent.($_)
}
这给了我:
$oData
systemId : {da1895, 45364d}
legalEntity : {A0, 5G}
positionDate : {2019-04-08 00:00:00.0, 2019-04-08 00:00:00.0}
account : {@{string=G32}, @{string=G81}}
seg : {@{string=S}, @{string=S}}
strike : {@{double=4.4}, @{double=5.0}}
我现在有点卡住了,上面没有转换为 csv。
请注意,除了元数据和记录内容之外,我没有硬编码任何字段名,并且我希望在 JSON 结构发生变化时保持这种灵活性。
谢谢
【问题讨论】:
标签: arrays json powershell csv