web-dev-qa-db-fra.com

Conversion de JSON en CSV à l'aide de PowerShell

J'ai un exemple au format JSON ici qui convertit bien si j'utilise quelque chose comme: https://konklone.io/json/

J'ai essayé le code suivant dans PowerShell:

(Get-Content -Path $pathToJsonFile | ConvertFrom-Json) 
| ConvertTo-Csv -NoTypeInformation 
| Set-Content $pathToOutputFile

Mais le seul résultat que je reçois est le suivant:

{"totalCount":19,"resultCount":19,"hasMore":false,"results":

Comment procéder pour convertir cela correctement dans PowerShell?

6
Anders Ekelund

En regardant uniquement (Get-Content -Path $pathToJsonFile) | ConvertFrom-Json, il semble que le reste du JSON se dirige vers une propriété results afin que nous puissions obtenir le résultat que je pense que vous voulez en faisant:

((Get-Content -Path $pathToJsonFile) | ConvertFrom-Json).results |
    ConvertTo-Csv -NoTypeInformation |
    Set-Content $pathToOutputFile

Pour votre information, vous pouvez faire ConvertTo-Csv et Set-Content en un coup avec Export-CSV:

((Get-Content -Path $pathToJsonFile) | ConvertFrom-Json).results |
    Export-CSV $pathToOutputFile -NoTypeInformation
9
Mark Wragg

Vous devez sélectionner la propriété results dans votre fichier CSV à l'aide de la cmdlet Select-Object avec le paramètre -expand

Get-Content -Path $pathToJsonFile  | 
    ConvertFrom-Json | 
    Select-Object -expand results | 
    ConvertTo-Csv -NoTypeInformation |
    Set-Content $pathToOutputFile
5
Martin Brandl

Je recevais mon json d'un REST api web et j'ai constaté que ça fonctionnait:

Invoke-WebRequest -method GET -uri $RemoteHost -Headers $headers 
 | ConvertFrom-Json 
 | Select-Object -ExpandProperty  <Name of object in json>
 | ConvertTo-Csv -NoTypeInformation 
 | Set-Content $pathToOutputFile

I end up with a perfectly formatted csv file
1
Pat Fahy