2017-02-21 36 views
1

Я пишу скрипт powershell для вызова API RESTful, и мне нужно проанализировать ответ. У меня возникли проблемы с разбором ответа, потому что в массиве нет ключевого имени. API просто возвращает содержимое массива:Как разобрать ответ RESTful API с powershell, который не имеет ключа, определенного из массива

[ 
    { 
     "ProfileId": "b9b4bf0b-fea3-4464-af91-b79b521d36ba", 
     "SourcePhoneNumber": "8880001111", 
     "FirstName": "Peter" 
    }, 
    { 
     "ProfileId": "b9b4bf1b-cta3-4464-af91-b68c521d36ba", 
     "SourcePhoneNumber": "8660001111", 
     "FirstName": "Fred" 
    } 
] 

Вот как я звоню API и получить ответ:

$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" 
$headers.Add("content-type", "application/json") 
$headers.Add("Accept-Language", "en-US") 
$headers.Add("Authorization", "OAuth $AccessToken") 

$response = Invoke-RestMethod "$($privateApiUrl)/api/v1/profiles" -Headers $headers -Method Get -ErrorVariable RestError -ErrorAction SilentlyContinue 

if ($RestError) 
{ 
    $HttpStatusCode = $RestError.ErrorRecord.Exception.Response.StatusCode.value__ 
    $HttpStatusDescription = $RestError.ErrorRecord.Exception.Response.StatusDescription 

    Throw "Http Status Code: $($HttpStatusCode) `nHttp Status Description: $($HttpStatusDescription)" 
} 
else { 
    Write-Host $response 

    #Need to parse the first ProfileId out of the response here 
    $json = ConvertTo-Json -InputObject @($response) 

    Write-Host $json[0].ProfileId #This outputs nothing 

    $response | Out-File -FilePath c:\response2.txt 
} 

второй в последней строке «Write-Host $ JSon [0] ... есть где я ищу для доступа к идентификатору профиля.

Ответ получен в c: \ response2.txt, поэтому я знаю, что запрос API работает, и я получаю хорошие данные из вызова API.

Так что я делаю неправильно в доступе к ProfileId объектов?

+1

Ваш метод остальное возвращает строку JSON. Invoke-RestMethod неявно преобразует это в используемые объекты PowerShell. Вы преобразовываете его обратно в бесполезный текст JSON, а затем не можете его использовать. Попробуйте '$ response [0]'. – TessellatingHeckler

+0

Вот и все, вы рок! благодаря – user1252399

ответ

0

Как указано TessellatingHeckler - я просто нужно не преобразовать его в JSON и использовать $ ответ [0] .ProfileId