Windows环境下执行带JSON负载的curl命令如何避免大量转义?
Windows下curl/PowerShell发送JSON POST:不用文件也能免转义
一、CMD里用curl 8.4.0的正确姿势
CMD的命令解析器认双引号当字符串边界,所以JSON里的双引号得用^转义,配合--data-raw参数保证负载原样传递:
curl -X POST -H "Content-Type: application/json" --data-raw "{^"username^":^"john^",^"email^":^"john@example.com^"}" http://你的Spring接口地址
嫌手动加^麻烦?先把JSON存环境变量再调用:
set "JSON_BODY={^"username^":^"john^",^"email^":^"john@example.com^"}" curl -X POST -H "Content-Type: application/json" --data-raw "%JSON_BODY%" http://你的Spring接口地址
二、PowerShell里的简洁写法
PowerShell里的curl默认是Invoke-WebRequest的别名,别用这个,直接调用curl.exe才是你安装的那个curl。两种省心方式:
方式1:单引号包裹JSON
PowerShell里单引号内的内容不会被解析,直接传给curl,后端收到的就是标准双引号JSON,完全不用转义:
& curl.exe -X POST -H "Content-Type: application/json" --data-raw '{"username":"john","email":"john@example.com"}' http://你的Spring接口地址
方式2:多行JSON用Here-String
如果JSON是多行结构,用PowerShell的Here-String(@' ... '@)包裹,一行都不用转义:
$jsonPayload = @' { "username": "john", "email": "john@example.com", "roles": ["user", "admin"] } '@ & curl.exe -X POST -H "Content-Type: application/json" --data-raw $jsonPayload http://你的Spring接口地址
避坑提醒
- CMD里绝对不能用单引号包JSON!CMD不认单引号当字符串边界,会把单引号当成JSON的一部分传给后端,Jackson直接报错说有意外的撇号。
- PowerShell里一定要写
curl.exe,别只写curl,不然会触发系统自带的Invoke-WebRequest,参数规则不一样,容易抛出异常。 - 不管用哪种方式,都用
--data-raw参数,别用-d,不然curl可能会偷偷做URL编码,导致JSON解析失败。
内容的提问来源于stack exchange,提问作者Sergey Zolotarev
相关产品推荐
相关产品推荐

