2016-06-30 25 views
2

Ich habe eine sehr große JSON-Antwort für Mitarbeiter, die ich versuche, in Tabellenformat zu gelangen, in CSV zu exportieren und schließlich in SQL Server einzufügen. Ich konnte feststellen, wie alle meine Variablen aus der JSON-Datei abgerufen werden, aber jetzt bekomme ich alle meine Werte in einer Zeile für jede Spalte statt einer neuen Zeile für jeden Mitarbeiter eingefügt. Beim Exportieren in CSV wird der Wert in System.Object [] umgewandelt.Powershell psustomobject format-table neue Zeile statt einer Zeile

$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 

Die Spalten sind eine kleine Probe, es gibt tatsächlich wahrscheinlich 100 Spalten. Allerdings gibt meine Antwort wie folgt aus:

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

Ich möchte es zurück:

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

Auch wenn in CSV-Export der Antwort hat die richtigen Spalten, aber alle Spalten zurückgeben mit: System. Objekt[]. Auch meine Felder, die Ints und Daten haben, geben keine Daten zurück. Wie kann ich das auch reparieren?

Ich habe versucht, sort-Objekt, Gruppe-Objekt, for-each-Schleifen. Nichts hat funktioniert.

Antwort

0

Sie können wie folgt versuchen:

$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 

Ihr Snippet nimmt alle Werte für jede Spalte und speichert sie in einem einzigen Objekt stattdessen auf die Objektsammlung von Iterieren von JSON konvertiert.

Sobald Sie Format-Table verwenden, werden die Daten für die Anzeige formatiert, aber nicht mehr in der Pipeline verwendbar. Deshalb habe ich die Anzeige auf dem Bildschirm und den CSV-Export getrennt.

+0

Ich habe versucht, Ihren genauen Code und noch jeden Mitarbeiter in der gleichen Zelle für die CSV. Von einem anderen Thread las ich, dass ich eine for-Schleife machen könnte, und benutze [i] am Ende jedes Spaltennamens. Das funktionierte für Spalten, die immer ausgefüllt wurden, aber Spalten, die nicht wie MiddleName waren, endete mit dieser Methode in der falschen Reihenfolge. – Jumpman