ConverTo-Json изменение предполагаемого вывода

У меня есть psobject, который создается из вывода JSON Invoke-RestMethod. Я намерен изменить одно значение, преобразовать его обратно в JSON, а затем снова добавить в REST API приложения с другим Invoke-RestMethod. Раньше я делал это несколько раз с одним и тем же REST API, поэтому я не уверен, почему этот не работает.

Псобъект $restOut выглядит так:

id: 123
limit: @{limitMb=0; limitPercent=0}

Следующий блок кода изменяет идентификатор, если новый идентификатор, который я хочу, еще не установлен.

$newId = 456
if($restOut.id -ne $newId){
   $restOut.id = $newId
   $inputJson = $restOut | ConvertTo-Json -Depth 2
   Invoke-RestMethod -Uri $restURl -Method PUT -Body $inputJson
}

Я ожидаю $inputJson чтобы выглядеть так (и psobject $restOut соответствует ожиданиям):

{
   "id": "456",
   "limit": {
               "limitMb": 0,
               "limitPercent": 0
            }
}

Но на самом деле я получаю:

{
   "id":  {
             "value": "456",
             "id": "456"
          },
   "limit": {
               "limitMb": 0,
               "limitPercent": 0
            }
}

Как уже было сказано, я много раз проделывал эту точную манипуляцию в других скриптах, нацеленных на тот же программный API, и на этот раз просто не понимаю, как это работает. Любая помощь приветствуется. Благодарность!

1 ответ

Решение

Легко исправить

Это был упрощенный образец. В моем реальном сценарии$newId = 456фактически был назначен другим вызовом API. Следовательно, это тоже был объект. Простое цитирование его в строке, которая изменяет идентификатор, чтобы сделать его строкой, устраняет проблему:

$restOut.id = "$newId"

вместо того

$restOut.id = $newId
Другие вопросы по тегам