2015-05-27 6 views
5

ho un i dati JSON strutturati come segue (ci possono essere alcuni errori qui, i dati che sto utilizzando va bene):Powershell convertfrom-json | ConvertTo-CSV

[{ 
"id": 12345, 
"itemName": "some string", 
"sellerId": 123, 
"seller": "", 
"categoryId": , 
"categoryPath": [ 
    { 
    //more data 
    }, 
    { 
    //more data 
    } 
]}, 
{"id": 12346, 
"itemName": "some other string", 
"sellerId": 234, 
"seller": "", 
"categoryId": , 
"categoryPath": [ 
    { 
    //more data 
    }, 
    { 
    //more data 
    } 
] 
}] 

vorrei convertirlo in formato CSV in modo che la scelta i nomi delle proprietà diventano intestazioni csv e il loro valore (solo la profondità 1) diventa dati. es

id,itemName,sellerId 
12345,"some string",123 
12346,"some other string",234 

Ho provato con centinaia di varianti di

cat file.json | convertfrom-json | convertto-csv 

ma nessuno ha funzionato. Tutto quello che ottengo è dati CSV con nomi di oggetti/tipi e non riesco a capire come farlo usare solo le proprietà selezionate di ogni oggetto da dati JSON.

+0

Non è un affare enorme, ma i dati di ingresso non sarebbe abbinare il vostro esempio di output. – Matt

+0

Grazie per averlo indicato, ho reso l'output di esempio corrispondente ai dati di input. –

+1

Non potrei farlo in una riga. Per te funziona? '$ convertito = Get-Content file.json -raw | ConvertFrom-Json; $ convertito | Seleziona id, itemName, sellerId | Convertto-CSV -NoTypeInformation'. Ho bisogno di salvare i risultati su una variabile prima per qualche motivo che non conosco ancora. Funziona dopo. – Matt

risposta

8

In breve è necessario fare qualcosa di simile:

(Get-Content file.json -Raw | ConvertFrom-Json) | Select id,itemName,sellerId | Convertto-CSV -NoTypeInformation 

Il primo problema era che stava passando Get-Content singole linee di ConvertFrom-Json che non è ciò che vuole. L'utilizzo dello switch -Raw lo passa nella sua interezza.

Il (Get-Content file.json -Raw | ConvertFrom-Json) deve essere tra parentesi in quanto ci consente di continuare con la pipe. Le proprietà non sono accessibili senza farlo. Sembra che stia cercando di passare l'intero oggetto invece delle sue singole parti lungo il tubo.

-NoTypeInformation rimuove le linee come questo

#TYPE Selected.System.Management.Automation.PSCustomObject