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
我有一个从 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