Перебор результата Invoke-WebRequest JSON

Я пытаюсь повторить результат вызова веб-запроса через powershell

$response = Invoke-WebRequest -URI $apiUri -Method Get -UseBasicParsing
$response

Результат:

StatusCode        : 200
StatusDescription : OK
Content           : {"tenants":[{"name":"default","active":true},{"name":"tenant1","active":true}]}
RawContent        : HTTP/1.1 200 OK
...

Использование ConvertFromJson

$parsed = $response.Content | ConvertFrom-Json
$parsed

Результат:

tenants : {@{name=default; active=True}, @{name=tenant1; active=True}}

Теперь я хочу перечислить все значения имени, подобные этому

Name
--------
default
tenant1

Я попытался повторить это с помощью этого скрипта, но не могу получить результат:

$parsed | Select-Object -Property name | ForEach-Object {
    Write-Host $_.name
}

person Linc Abela    schedule 17.11.2020    source источник


Ответы (1)


Код ниже выведет таблицу имен:

$json = '{"tenants":[{"name":"default","active":true},{"name":"tenant1","active":true}]}'

$data = $json | ConvertFrom-Json

$data.tenants | ft name

#name
#----
#default
#tenant1

Если вы хотите записать их в переменную в виде массива, вы можете использовать функцию под названием Перечисление участников:

$names = $data.tenants.name;

$names
#default
#tenant1
person mclayton    schedule 17.11.2020
comment
Спасибо! так что я просто скучаю по .tenants. Мне нужно foreach, так как мне нужно что-то сделать в каждом элементе. $parsed.tenants | Select-Object -Имя свойства | ForEach-Object {Write-Host $_.name #сделать что-нибудь} - person Linc Abela; 18.11.2020
comment
@LincAbela - вам действительно не нужен select-object - вы можете просто сделать $data.tenants | foreach-object { write-host $_.name } - person mclayton; 18.11.2020