因此,在将我以前的curl发布到PowerShell哈希表问题(已解决)之后,我现在遇到了进一步的问题,这次将curl转换为PowerShell时,数据中有3个哈希表(?)(或者更可能是我的PowerShell技能)。这次,我的脚本通过PowerShell返回:
...General Error java.util.LinkedHashMap cannot be cast to java.util.List
这是通过邮递员完美工作的卷发:
curl -X PATCH \
https://example.com/apis/v1.1/parameters \
-H 'Authorization: Bearer 1234567890' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache' \
-d '{
"data": [
{
"DUID": 3299,
"AID": 551,
"CID": 10002,
"Parameters": [
{
"name": "Customer.1/AddressLine1",
"value": "SOMEWHERE ROAD"
}
]
}
]
}'
下面是PowerShell脚本,我使用前面问题中给出的建议构建它:
cURL to PowerShell - Double hash table in --data?
$CURLEXE = 'C:\Windows\System32\curl.exe'
$URL1 = "https://example.com/apis/v1.1/parameters"
$Body = @{
'data'= @{
'DUID'= 3299;
'AID'= 551;
'CID'= 10002;
'Parameters'=
@{'name'= "Customer.1/AddressLine1";
'value'= "SOMEWHERE ROAD"}
}
}
$CurlArgument = '-X', 'PATCH',
$URL1,
'-H',
$AuthBearer,
'-H', 'Content-Type: application/json',
'-H', 'cache-control: no-cache',
'-d',
(($Body | ConvertTo-Json) -replace '"', '\"')
& $CURLEXE @CurlArgument
我的$curlArgument如下:
-X
PATCH
https://example.com/apis/v1.1/parameters
-H
Authorization: Bearer 1234567890
-H
Content-Type: application/json
-H
cache-control: no-cache
-d
{
\"data\": {
\"CID\": 10002,
\"DUID\": 3299,
\"AID\": 551,
\"Parameters\": {
\"value\": \"SOMEWHERE ROAD\",
\"name\": \"Customer.1/AddressLine1\"
}
}
}
返回此错误:
{“状态”:“失败”、“错误”:[ {代码〉:“5004”、“名称”):“一般错误”、“严重性”:“3”、“消息”:“操作期间发生的错误”、“详细信息”:{“5004”:“一般错误java. UTI.LIKEDHHMAP不能强制转换为java. U.L.List}}}}
它可以是“customer.1/addressLine1”字段中的正斜杠吗?我尝试了第二次-用这些替换,但仍然有相同的错误:
(($Body | ConvertTo-Json) -replace '"', '\"' -replace '/', '\/')
(($Body | ConvertTo-Json) -replace '"', '\"' -replace '/', '\2f')
(($Body | ConvertTo-Json) -replace '"', '\"' -replace '/', '\%2f')
可能是数据哈希表中缺少方括号吗?它们存在于curl中,但不在PowerShell中,但是在我之前的脚本中,我没有方括号,而且PowerShell似乎不喜欢它们。
PowerShell是否可以更改“value”和“name”的顺序?
如有任何帮助,我们将不胜感激。
更新
感谢@mklement0目前的帮助,我已将PowerShell编辑为以下解决方案!
$Body = @{
data = , @{
DUID = 3299
AID = 551
CID = 10002
Parameters = , @{
name = "Customer.1/AddressLine1"
value = "SOMEWHERE ROAD"
}
}
}
$CurlArgument = '-X', 'PATCH',
'https://example.com/apis/v1.1/parameters',
'-H',
$AuthBearer,
'-H', 'Content-Type: application/json',
'-H', 'cache-control: no-cache',
'-d',
(($Body | ConvertTo-Json -Depth 4) -replace '"', '\"')
& $CURLEXE @CurlArgument