Как разобрать / получить доступ к JSON, возвращенному Invoke-WebRequest в Powershell 4 - PullRequest
0 голосов
/ 20 января 2020

У меня следующий вызов API в скрипте powershell (Powershell 4.0):

$Json = Invoke-WebRequest -Uri $RequestURL -UseBasicParsing -Headers $headers -ContentType  'application/json; charset=utf-8' -Method POST -Body $postParams -TimeoutSec 40 

... и содержимое ответа (которое представляет собой строку в формате JSON) записано в файл:

Set-Content $path -Value $Json.Content

Пример типичного ответа ...

{
    "MyArray": [{
        "MyField": "A1",
        "MyField2": "A2"
    }, {
        "MyField": "B1",
        "MyField2": "B2"
    }]
}

Все хорошо, но теперь у меня есть требование проанализировать возвращенное содержимое как JSON и запросите некоторые свойства из этого скрипта Powershell.

Я предполагаю, что мне нужно преобразовать мою строку в 'правильную' JSON, а затем в объект powershell для доступа к свойствам ... поэтому я попробовал комбинации ConvertTo- Json и ConvertFrom- Json но, кажется, никогда не может получить к нему доступ, кроме как в строке. Например ...

    $x = $Json.Content | ConvertTo-Json
    Write-Host $x.MyArray[0].MyField

    $y = $x | ConvertFrom-Json
    Write-Host $y[0].MyArray[0].MyField

В обоих случаях выше я получаю сообщение об ошибке «Невозможно индексировать в нулевой массив», указывающее на то, что MyArray равен нулю.

Как мне преобразовать мой ответный объект $ Json в объект, в который я могу углубиться?

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Это похоже на работу ...

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
    $x = (New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer -Property @{MaxJsonLength=67108864}).DeserializeObject($Json.Content)
    Write-Host $x.MyArray[0].MyField

... хотя пока не знаю, почему.

0 голосов
/ 20 января 2020

См. ConvertFrom- Json

Преобразует строку в формате JSON в пользовательский объект или таблицу ha sh.

Командлет ConvertFrom- Json преобразует форматированную строку JavaScript Object Notation (JSON) в пользовательский объект PSCustomObject, у которого есть свойство для каждого поля в строке JSON.

Once вы получаете ответ, преобразованный в пользовательский объект или таблицу ha sh, вы можете получить доступ к отдельным свойствам

Ссылка включает примеры кодирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...