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

Shell脚本中使用curl命令如何发送嵌套对象格式的POST数据?

问题原因

原脚本存在3个核心错误导致JSON格式异常、服务端解析失败:

  • JSON字符串值未包裹双引号:JSON规范要求字符串类型的字段值必须用双引号包裹,原脚本直接拼接serialno、filePath的变量值,无外层双引号,直接破坏JSON结构。
  • 请求头格式非法:原脚本-H "'Content-Type: application/json'"多套了一层多余的单引号,导致服务端无法识别请求体为JSON格式,触发异常解析逻辑。
  • 变量拼接逻辑不严谨:直接在单引号外拼接路径变量,若路径存在空格、特殊字符会进一步破坏JSON结构。
修正后完整脚本
#!/bin/bash
echo "hello welcome to testing"
token=asdghadjakalskl.....

sNo=(ab1 ab2 ab3 ab4 ab5)
fn=(notes1 Pictures/crop.jpeg Pictures/cat.jpeg Pictures/mountain.jpg Pictures/magic.jpeg Pictures/tree.jpg)

echo $1

for (( i=0; i< $1;i++ ))
do
    echo ${sNo[i%5]} ${fn[i%6]}
    f="/home/name/${fn[i%6]}"
    echo file $f
    echo $i request sent
   
    curl -d "{\"DataArr\":[{\"serialno\":\"${sNo[i%5]}\",\"filePath\":\"$f\"}]}" \
      -H 'Content-Type: application/json' \
      -H "Authorization: $token" \
      http://localhost:8080/create
done
关键修改说明
  • 给serialno和filePath的变量值外层添加转义双引号\",保证生成的JSON完全符合语法规范
  • 移除Content-Type请求头外层多余的单引号,确保服务端正常识别JSON格式请求体
  • 优化Authorization头的拼接逻辑,删除多余的嵌套引号,避免认证失败
  • 整个请求体用双引号包裹,内部双引号通过反斜杠转义,保证变量正常解析的同时不破坏JSON结构
可选优化方案

如果你的序列号、文件路径可能包含特殊字符(如空格、双引号),推荐用jq工具动态生成JSON,彻底避免手动拼接的格式问题:

# 循环内生成JSON的代码替换为
json_body=$(jq -n --arg sn "${sNo[i%5]}" --arg path "$f" '{"DataArr": [{"serialno": $sn, "filePath": $path}]}')
# curl调用改为
curl -d "$json_body" \
  -H 'Content-Type: application/json' \
  -H "Authorization: $token" \
  http://localhost:8080/create

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:48:01