2

J'ai une très grande réponse JSON pour les employés que j'essaie d'obtenir au format de table, exporter au format CSV et éventuellement insérer dans SQL Server. J'ai été en mesure de déterminer comment obtenir toutes mes variables à partir du fichier json, mais maintenant je reçois toutes mes valeurs insérées sur une ligne pour chaque colonne au lieu d'une nouvelle ligne pour chaque employé. En outre, lorsque j'exporte au format CSV, la valeur devient System.Object [].Powershell pscustomobject format-table nouvelle ligne au lieu d'une ligne

$json1 = Invoke-webRequest -Uri $Workeruri -Certificate $cert -Headers $WorkerHeader | convertfrom-json 

$table = [PSCustomObject] @{ 
associateOID = $json1.workers.associateOID 
workerID = $json1.workers.workerID.idValue 
GivenName = $json1.workers.person.legalName.givenName 
MiddleName = $json1.workers.person.legalName.middleName 
FamilyName1 = $json.workers.person.legalName.familyName1 

} |format-table -autosize 
$table | export-csv $filepath -NoTypeInformation 

Les colonnes sont un petit échantillon, il y a en fait probablement 100 colonnes. Cependant, ma réponse revient à ceci:

associateOID  workerID  givenName           
------------  --------  ---------                                                           
{1,2,3,4,5...} {a,b,c,d,e...} {Lebron James, Micheal Jordan, Steph Curry...} 

je voudrais qu'il revienne:

associateOID  workerID  givenName           
------------  --------  --------- 
1     A    Lebron James 
2     B    Micheal Jordan 
3     C    Steph Curry 

En outre, lors de l'exportation au format CSV la réponse a les colonnes correctes, mais toutes les colonnes reviennent avec: Système. Objet[]. De plus, mes champs qui ont des int et des dates ne retournent pas de données. Comment puis-je résoudre cela aussi?

J'ai essayé d'utiliser tri-objet, groupe-objet, pour chaque boucle. Rien n'a fonctionné.

Répondre

0

vous pouvez essayer comme ceci:

$json1 = Invoke-webRequest -Uri $Workeruri -Certificate $cert -Headers $WorkerHeader | ConvertFrom-Json 

$table = $json1 | ForEach-Object { 
    [PSCustomObject] @{ 
     associateOID = $_.workers.associateOID 
     workerID = $_.workers.workerID.idValue 
     GivenName = $_.workers.person.legalName.givenName 
     MiddleName = $_.workers.person.legalName.middleName 
     FamilyName1 = $_.workers.person.legalName.familyName1 
    } 
} 

$table | Export-Csv $filepath -NoTypeInformation 

$table | Format-Table -AutoSize 

Votre extrait prend toutes les valeurs pour chaque colonne et les stocke dans un seul objet au lieu de itérer sur la collection d'objets convertis de JSON.

En outre, une fois que vous utilisez Format-Table, les données sont formatées pour l'affichage mais ne sont plus utilisables dans le pipeline. C'est pourquoi j'ai séparé l'affichage à l'écran et l'export CSV.

+0

J'ai essayé votre code exact et j'ai toujours chaque employé dans la même cellule pour le fichier CSV. D'un autre thread, j'ai lu que je pouvais faire une boucle for, et utiliser [i] à la fin de chaque nom de colonne. Cela a fonctionné pour les colonnes qui étaient toujours remplies, mais les colonnes qui n'étaient pas telles que MiddleName, se sont retrouvées dans le mauvais ordre avec cette méthode. – Jumpman