Powershell Json到CSV选择第二级列
我有以下格式的json,其中一些列位于第二级。我希望第二级的列在CSV中处于第一级Powershell Json到CSV选择第二级列,powershell,Powershell,我有以下格式的json,其中一些列位于第二级。我希望第二级的列在CSV中处于第一级 { "ApiKey": "123", "BasicDetails": { "ClientID": "1234", "CompanyName": "C1", "ContactName": "", "EmailAddress": "", "Country": "United Kingdom", "TimeZone": "(GMT+00:00)" }} 所需
{
"ApiKey": "123",
"BasicDetails": {
"ClientID": "1234",
"CompanyName": "C1",
"ContactName": "",
"EmailAddress": "",
"Country": "United Kingdom",
"TimeZone": "(GMT+00:00)"
}}
所需输出为:
APIKey, ClientID, CompanyName, ContactName, EmailAddress,Country,Timezone
123,1234,C1,,,United Kingdom,(GMT+00:00)
我试过:
(GET-Content F:/my.json -RAW | ConvertFrom-Json)|Select Columns|Export-CSV F:/my.csv
编辑
实际Json:
{
我需要一个级别的Belling Detail列、Basic Details列和API键这应该适用于深度为2的所有JSON文件(您要求的):
棘手的问题。这在很大程度上取决于你是在为你的具体案例寻找解决方案还是一种更普遍的方法 首先,按照马丁·布兰德尔的回答 除此之外,还有
转换为FlatObject
:
感谢您的回复。我有账单详细信息和基本详细信息。我已经编辑了我的问题,您能看一下json并建议我编辑了我的答案吗?它是通用的,应该适用于所有json文件。请尝试一下
"ApiKey": "123",
"BasicDetails": {
"ClientID": "1234",
"CompanyName": "C1",
"ContactName": "",
"EmailAddress": "",
"Country": "United Kingdom",
"TimeZone": "(GMT+00:00)"
}
"BillingDetails": {
"CurrentTier": "0 - 500",
"CurrentMonthlyRate": 9.0000,
"MarkupPercentage": 0,
"MonthlyScheme": "Basic",
"Currency": "USD",
"ClientPays": false
}}
$tempObject = @{}
(GET-Content F:/my.json -RAW | convertfrom-json).PsObject.Properties | ForEach-Object {
if ($_.TypeNameOfValue -eq 'System.Management.Automation.PSCustomObject')
{
$_.Value.PsObject.Properties | ForEach-Object {
$tempObject += @{$_.Name = $_.Value}
}
}
else
{
$tempObject += @{$_.Name = $_.Value}
}
}
[PsCustomObject]$tempObject | Export-CSV F:/my.csv