2016-06-29 2 views
1

У меня возникла проблема с вызовом API JSON с использованием Powershell, который возвращает многоуровневый вложенный массив. Использование стандартного convertfrom-json & convertto-json не дает мне полных результатов. Я просто получаю ...Развернуть многоуровневые таблицы вложенных хэшей Powershell из JSON api call

Я провел много исследований по этому вопросу и нашел следующее: link на стеке для расширения вложенных хеш-таблиц, и это касается лучшего формата, который я получил. Для справки, я пытаюсь вставить записи сотрудников в SQL Server. У меня есть функция JSON для этого, и вам нужно получить ответ JSON в расширенном формате. Есть некоторые аспекты безопасности, которые не позволят мне публиковать фактические данные, поэтому я пытаюсь представить пример некоторых проблем, которые у меня есть. Имейте в виду, что ответ за 1 запись сотрудника из сотен в целом, а в SQL будет одна таблица со строкой для каждого сотрудника.

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

$workers = $json1.workers | select -property * 

$workers | format-table Name, @{n='Value'; e={ 
    if ($_.Value -is [Hashtable]) { 
     $ht = $_.Value 
     $a = $ht.keys | sort | % { '{0}={1}' -f $_, $ht[$_] } 
     '{{{0}}}' -f ($a -join ', ') 
    } else { 
     $_.Value 
    } 
}} 

$workers 

Я также попытался:

$workers | convertto-json 

и

$workers = json1.workers | foreach-object {$_} 

Данные, возвращаемые возвращается, как это:

associateOID   : XXXXXXXXXXXXXX 
workerID    : @{idValue=XXXXXXX} 
person    : @{governmentIDs=System.Object[]; legalName=; birthDate=0000-00-00; legalAddress=; genderCode=; maritalStatusCode=; socialInsurancePrograms=System.Object[]; tobaccoUserIndicator=False; raceCode=; customFieldGroup=} 
workerDates   : @{originalHireDate=2015-03-09; terminationDate=2016-03-18} 
workerStatus   : @{statusCode=} 
businessCommunication : @{emails=System.object[]} 
workAssignments  : {@{itemID=xxxxxx; occupationalclassification=System.Object[]; etc}} 

мне это нужно, чтобы вернуться со всеми столбцов на левой стороне, utiliz «AssociateOID» в качестве ключевого идентификатора для индивидуума. Я уже получил ответ JSON вернуться полностью расширен, используя этот формат, но он не работает с импортом в SQL Server или выглядит очень хорошо, как ответ Google Почтальон:

$json1 = Invoke-webRequest -Uri $Workeruri -Certificate $cert -Headers $WorkerHeader | format-list -property * 
+0

Вопрос о полном расширении '' рабочих' в JSON? –

+0

В итоге я все расширил, используя PScustomObject. Однако теперь я не могу получить новую строку на одного сотрудника. Я обрабатываю настраиваемый объект для автоматической сортировки таблицы, но каждый столбец выглядит как {xxxxx, xxxx, xxx} и не выполняет новую строку. – Jumpman

ответ

0

Вы имеете в виду вы хотите получить файл JSON, который расширяет все объекты/свойства, правильно? Используйте -Depth вариант ConvertTo-Json для правильного написания файла JSON. По умолчанию значение -Depth опции 2.

$workers | ConvertTo-Json -Depth 100 

Укажите соответствующую глубину в соответствии с вашими JSON файлов.