2

テーブル形式に変換し、CSVにエクスポートし、最終的にSQL Serverに挿入しようとしている従業員に対して、非常に大きなJSON応答があります。私はjsonファイルからすべての変数を取得する方法を決定することができましたが、各従業員の新しい行ではなく、各列のすべての値を1つの行に挿入するようになりました。 また、CSVにエクスポートすると、値はSystem.Object []に変わります。Powershell pscustomobject形式テーブル1行ではなく新しい行

$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 

列は実際にはおそらく100列あります。しかし、このような私の応答を返す:

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

は、私はそれを返すしたいと思います:CSVへのエクスポート時に

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

はまた、応答が正しい列を持っていますが、すべての列がで返す:システム。オブジェクト[]。 また、intと日付を持つ私のフィールドはデータを返していません。どうすればそれを修正することもできますか?

私はsort-object、group-object、for-eachループを使用しようとしました。何も働いていません。

答えて

0

あなたは次のように試すことができます。

$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 

あなたのスニペットでは、各列のすべての値を取り、代わりにJSONから変換オブジェクトコレクションに反復の単一のオブジェクトに格納します。

また、Format-Tableを使用すると、データは表示用にフォーマットされますが、パイプラインでは使用できなくなります。だからこそ私は画面とCSVの書き出しを分けた。

+0

私はあなたの正確なコードを試して、CSVのために同じセルに各従業員を依頼しています。別のスレッドから、私はforループを実行でき、各カラム名の最後に[i]を使用できることを読んだ。これは常に記入された列に対しては機能しましたが、MiddleNameなどではない列はそのメソッドで間違った順序で終了しました。 – Jumpman

関連する問題