Объект пуст? - PullRequest
       0

Объект пуст?

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

Я использую Azure API> https://docs.microsoft.com/en-us/rest/api/azure/devops/git/pull%20request%20query/get?view=azure-devops-rest-5.1

Я использую этот код:

$body = @"
{
    "queries": [{
        "items": [
            "59c1c31397b266116ff6d735e5638ef5d1b598a0"
        ],
        "type": "commit"
    }]
}
"@ 

$x = Invoke-RestMethod -Uri $someLink -Headers @{Authorization = $pat } -Body $body -Method Post -ContentType 'application/json'
Write-Host $x
Write-Host $x | ConvertFrom-Json
Write-Host $x.results | ConvertFrom-Json

Я удалил ссылку по соображениям безопасности.

Когда я запускаю код, в консоли я получаю следующее:

2020-01-20T16: 17: 55.8600905Z @ {query = System.Object []; результаты = System.Object []}

2020-01-20T16: 17: 55.8637026Z @ {query = System.Object []; results = System.Object []}

2020-01-20T16: 17: 55.8674193Z

Я не уверен, что объекты queries и results пусты или что мне нужен какой-то другой способ их прочтения.

1 Ответ

3 голосов
/ 20 января 2020
  • Write-Host выполняет запись на хост (который обычно является консолью / терминалом), минуя поток вывода PowerShell, поэтому такая команда, как Write-Host $x | ConvertFrom-Json, не имеет смысла потому что ConvertFrom-Json будет получать без ввода .

  • Write-Host записывает простые .ToString() строковые нестроковых входных объектов в хоста, что означает, что вы не получаете богатого, удобного для пользователя форматирования вывода PowerShell, который неявный вывод или - редко необходимые - явные вызовы Write-Output приводят к при конечной печати на хост по умолчанию , из-за к выходу не попадает ни в переменную, ни перенаправляется с помощью >).

  • Invoke-RestMethod автоматически анализирует вывод JSON, который он получает, в PowerShell пользовательских объектов ([pscustomobject] экземпляров, поэтому также нет концептуальной причины для передачи значений его свойств в ConvertFrom-Json - если API действительно не вернет вложенный JSON текст как * 10 37 * строковые значения в JSON, которые он возвращает.


Если вы хотите визуально проверить результаты, просто выведите их напрямую :

$x  # output visualization of the whole object
$x.results  # just the .results property

Вышеуказанный вывод в поток вывода успеха, что означает, что внешний вызывающий код вашего кода получит эти значения как часть вывода кода.

Если полученная таблица или Подобное списку форматирование (в зависимости от количества свойств) не говорит вам достаточно, вы можете преобразовать объекты обратно в JSON, добавив к ConvertTo-Json. Обратите внимание, что глубина сериализации по умолчанию последнего ограничена 2, поэтому вам может потребоваться передать более высокое значение -Depth, чтобы увидеть объект полностью - см. этот пост .

$x | ConvertTo-Json  # use -Depth <n>, if needed.
$x.results | ConvertTo-Json

Если вы действительно хотите просто напечатать значения в виде информации для пользователя , не становясь частью вывода, используйте Out-Host вместо Write-Host, поскольку Out-Host применимо богатое форматирование:

$x | Out-Host # print visualization of the whole object directly to the host
$x.results | Out-Host  # just the .results property

# Ditto via ConvertTo-Json
$x | ConvertTo-Json | Out-Host
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...