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

curl请求报错但Postman正常:JSON解码失败问题求助

解决curl发送JSON请求时的转义与格式错误问题

问题出在shell环境的引号解析规则和JSON格式要求的冲突上,Postman会自动处理转义细节,但curl需要严格遵循shell语法。以下是针对性的解决办法:

1. 最推荐的写法:用单引号包裹JSON数据

在bash/zsh等主流shell中,单引号内的内容会被原样解析,不需要转义双引号,完全符合JSON格式要求:

curl --location "http://localhost:5000/user/signup" \
  --header "Content-Type: application/json" \
  --data-raw '{ "name": "Raj Kumar", "email": "raj@example.com", "password": "samplepassword" }'

注意:单引号内部不要加任何反斜杠转义双引号,直接保留JSON原生格式即可。

2. 需使用shell变量时:双引号包裹+正确转义

如果需要在JSON中插入shell变量(比如$USER),必须用双引号包裹整个JSON串,同时给内部的每个双引号加反斜杠转义:

curl --location "http://localhost:5000/user/signup" \
  --header "Content-Type: application/json" \
  --data-raw "{ \"name\": \"Raj Kumar\", \"email\": \"raj@example.com\", \"password\": \"samplepassword\" }"

这种写法要确保所有内部双引号都被正确转义,否则shell会提前截断JSON串,导致服务器收到无效格式。

3. 排查你之前的错误根源

  • 第二个命令中,你用单引号包裹JSON却又加了\",导致服务器收到的JSON里是\"name\"这种非法格式,触发"Failed to decode JSON"错误。
  • 没有用引号完整包裹--data-raw的内容时,shell会把JSON中的空格当成命令参数分隔符,导致curl误把Kumar,email:...当成URL,触发"unmatched brace"或"bad URL"错误。

验证方法

可以先单独输出JSON内容,确认格式正确:

echo '{ "name": "Raj Kumar", "email": "raj@example.com", "password": "samplepassword" }'

输出应为标准JSON,无多余转义字符。

内容的提问来源于stack exchange,提问作者ni6hant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:05:32