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

在Bash脚本中向curl传递CSV变量时JSON无效问题排查

解决思路与排查步骤

1. 清理CSV数据的隐藏干扰字符

CSV文件常带有Windows换行符(^M)、首尾空格、UTF-8 BOM头等隐藏字符,这些会被带入变量破坏JSON格式:

  • 先排查隐藏字符:执行cat -A your_file.csv,查看输出中是否有^M、\t等异常符号
  • 针对性清理:
    • 移除Windows换行符:sed -i 's/\r$//' your_file.csv
    • 去除变量首尾空格:读取后用from=$(echo "$from" | xargs)、to=$(echo "$to" | xargs)处理

2. 确保CSV读取与变量赋值准确

循环读取CSV时,要避免分割逻辑错误导致变量混入多余内容:

  • 假设CSV格式为from_num,to_num,使用标准循环写法(支持含空格的字段,避免分割错误):
    # 跳过表头(如果有),逐行读取
    tail -n +2 your_file.csv | while IFS=, read -r from to; do
        # 先打印变量内容,确认无乱码或多余字符
        echo "当前From: '$from',To: '$to'"
        # 后续执行curl逻辑
    done
    

3. 用可靠方式构造JSON请求体

手动拼接引号极易出错,推荐两种稳妥方案:

方案一:用jq生成标准JSON

jq会自动处理变量的转义和格式,避免手动拼接失误:

# 先安装jq(Debian/Ubuntu用apt install jq,Mac用brew install jq)
body=$(jq -n --arg from "$from" --arg to "$to" '{
    "from": $from,
    "to": $to,
    "message": "你的消息内容"
}')
# 发送请求
curl -X POST -H "Content-Type: application/json" --data "$body" https://你的API地址

方案二:正确手动拼接引号

如果不用jq,必须保证变量被正确嵌入JSON字符串:

curl -X POST -H "Content-Type: application/json" --data '{
    "from": "'"$from"'",
    "to": "'"$to"'",
    "message": "你的消息内容"
}' https://你的API地址

这里的关键写法是'"$from"':单引号闭合外层字符串,双引号包裹变量,再用单引号重新开启外层字符串,确保变量内容被正确识别为JSON字符串值。

4. 调试定位问题

  • 打印构造好的JSON,验证格式:echo "$body",或用jq . <<< "$body"本地校验JSON合法性
  • 用curl的-v参数查看实际发送的请求体:curl -v -X POST ...,对比硬编码时的请求内容,直接定位变量赋值后的格式差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:57:11