使用Curl调用Github Content API上传文件时出现JSON解析错误
错误原因
你遇到的JSON解析错误是base64编码结果自带换行符导致的:
- Linux系统下默认的
base64命令会每输出76个字符插入1个换行符,换行符属于JSON字符串的非法未转义字符,直接拼接进JSON体后会破坏整体结构,触发解析失败。 - 硬编码base64字符串时你默认去掉了所有换行,因此可以正常请求。
解决方案
方案1:直接生成无换行的base64编码
修改base64转码命令,禁用自动换行即可适配原有curl逻辑:
- 适用Linux系统:
base64_logs=$(base64 -w 0 logs.tar.gz)
- 适用macOS系统:
base64_logs=$(base64 -b 0 logs.tar.gz)
方案2:用jq生成JSON(更稳妥,规避所有转义问题)
如果后续有扩展payload的需求,推荐用jq工具自动生成标准JSON格式,完全避免手动拼接的格式错误:
# 生成无换行base64 base64_logs=$(base64 -w 0 logs.tar.gz) # 用jq构造标准JSON体 json_payload=$(jq -n \ --arg commit_msg "some message" \ --arg file_content "$base64_logs" \ '{"message": $commit_msg, "content": $file_content}') # 发起curl请求 content_response=$(curl -v \ -X PUT \ -u some-user:$(params.git-token) \ -H "Accept: application/vnd.github.v3+json" \ $content_url \ -d "$json_payload")
内容的提问来源于stack exchange,提问作者disp_name
相关产品推荐
相关产品推荐

