You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 08:35:54