ConverTo-Json 改变预期的输出

ConverTo-Json altering intended output

我有一个从 Invoke-RestMethod 的 JSON 输出创建的 psobject。我的意图是更改一个值,转换回 JSON,然后使用另一个 Invoke-RestMethod 添加回应用程序 REST API。过去我用相同的 REST API 做过几次,所以我不确定为什么这个不起作用。

psobject $restOut 看起来像这样:

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

如果我想要的新 ID 尚未设置,下一段代码会更改 ID

$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,而这次我只是不知所措。任何帮助表示赞赏。谢谢!

轻松修复

这是一个简化的示例。在我的实际脚本中 $newId = 456 实际上是从另一个 API 调用中分配的。因此它也是一个对象。只需在更改 id 的行中引用它,使其成为一个字符串即可解决问题:

$restOut.id = "$newId"

而不是

$restOut.id = $newId