使用az rest发送POST请求时,JSON体含右括号')'报错,如何转义?
使用az rest发送含右括号的POST请求时的转义方法
问题场景
执行不含右括号的POST请求时,命令可正常运行:
az rest --method POST --uri "https://someaddress" --body '{"some": "Text" }'
但在请求体字符串中加入右括号')'后,命令执行失败:
az rest --method POST --uri "https://someaddress" --body '{"some": "Text)" }'
触发如下错误:
az : " }" was unexpected at this time. At line:2 char:1 + az rest --method POST --uri "https://someaddress" --body '{"some": "T ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified:(" }" was unexpected at this time.:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError
解决方法
该问题源于Windows命令行对特殊字符的解析规则,右括号')'会被识别为命令块的结束标记,需根据终端环境选择对应处理方式:
1. Windows CMD环境
用**脱字符^**转义右括号,同时将包裹请求体的单引号替换为双引号(CMD对单引号支持有限):
az rest --method POST --uri "https://someaddress" --body "{\"some\": \"Text^)\" }"
- 注意:双引号内部的双引号需用反斜杠
\转义,右括号前添加^完成转义。
2. Windows PowerShell环境
有两种便捷处理方式:
方式一:使用反引号转义
用PowerShell的转义符反引号 (注意不是单引号)转义右括号:
az rest --method POST --uri "https://someaddress" --body '{"some": "Text`)" }'
方式二:使用Here-String(适合复杂请求体)
通过Here-String定义请求体,无需手动转义特殊字符:
$body = @" {"some": "Text)" } "@ az rest --method POST --uri "https://someaddress" --body $body
3. Linux/macOS的bash/zsh环境
直接用单引号包裹请求体即可,bash会自动处理内部的右括号,无需额外转义:
az rest --method POST --uri "https://someaddress" --body '{"some": "Text)" }'
内容的提问来源于stack exchange,提问作者santal
相关产品推荐
相关产品推荐

