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