我无法将Windows中的有效cURL命令转换为等效的PowerShell InvokeRestMethod命令。看起来我很接近。我得到回应。但是,API似乎无法理解InvokeRestMethod命令发送的嵌套哈希表元素“ domain” 。 API似乎可以识别所有其他哈希元素。
cURL命令 (有效)
curl "https://api.rebrandly.com/v1/links" -X POST -H "apikey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -H "Content-Type: application/json" -d "{ \"destination\": \"http://longurl.com\", \"domain\": {\"fullName\": \"link.domain.com\"}}"
PowerShell:
$body = @{
"destination"="longurl.com"
"domain" = @("fullName", "link.domain.com")
} | ConvertTo-Json
$header = @{
"apikey"="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
"Content-Type"="application/json"
}
Invoke-RestMethod -Uri "https://api.rebrandly.com/v1/links" -Method 'Post' -Body $body -Headers $header
PS:我也尝试使用以下语法。不幸的是,我得到了相同的结果..其中“域”哈希元素被忽略了。
$body = @{
"destination"="longurl.com"
"domain[0]" = "fullName"
"domain[1]" = "link.domain.com"
} | ConvertTo-Json
答案 0 :(得分:2)
在使用@(...)
括号时,它将被解释为数组而不是键值哈希表,该表将在JSON中转换为[...]
数组。只需用@{...}
大括号替换嵌套语句中的括号即可表示哈希表:
$body = @{
"destination"="longurl.com"
"domain" = @{"fullName" = "link.domain.com"}
} | ConvertTo-Json
哪个匹配JSON:
{
"destination": "longurl.com",
"domain": {
"fullName": "link.domain.com"
}
}