2

테이블 형식으로 가져오고 CSV로 내보내고 결국 SQL Server에 삽입하려고하는 직원을위한 매우 큰 JSON 응답이 있습니다. json 파일에서 모든 변수를 가져 오는 방법을 결정할 수 있었지만 지금은 각 직원의 새 행 대신 각 열의 모든 값을 한 행에 삽입했습니다. 또한 CSV로 내보낼 때 값은 System.Object []로 바뀝니다.Powershell pscustomobject 형식 테이블 한 줄 대신 새로운 행

$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