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

通过Curl传递变量更新Gist时JSON解析失败问题求助

解决Gist更新时的JSON解析错误

问题根源

手动拼接JSON字符串时,content变量中可能包含JSON特殊字符(比如双引号"、反斜杠\、换行符\n等),这些字符会直接破坏JSON的语法结构,导致GitHub API无法正常解析请求体。直接用字符串拼接生成JSON的方式极易触发这类问题。

解决方案

改用jq工具来生成合法的JSON数据,它会自动处理所有特殊字符的转义操作,彻底避免手动拼接带来的格式错误。

修改后的完整脚本

#!/bin/bash

# 替换为你的个人访问令牌
access_token="<access_token>"

# 读取存储Gist ID的文件(每行一个ID)
while read -r gist_id; do
  # 获取Gist的原始数据
  gist_data=$(curl -s -H "Authorization: token $access_token" "https://api.github.com/gists/$gist_id")
  
  # 提取文件名和内容
  filename=$(echo "$gist_data" | jq -r '.files | keys[]')
  content=$(echo "$gist_data" | jq -r ".files[\"$filename\"].content")
  
  # 修改指定行内容
  # 替换为你需要的行号和新内容
  new_content="<new_content>"
  line_number=<line_number>
  content=$(echo "$content" | sed "${line_number}s/.*/$new_content/")
  
  # 用jq生成合法JSON,发送更新请求
  # 替换为你需要的Gist描述
  curl -s -X PATCH \
    -H "Authorization: token $access_token" \
    -H "Content-Type: application/json" \
    -d "$(jq -n --arg desc "<gist_description>" --arg fname "$filename" --arg cont "$content" '{description: $desc, files: {($fname): {content: $cont}}}')" \
    "https://api.github.com/gists/$gist_id" > /dev/null
done < "gist_ids.txt"

核心修改说明

  • 用jq构造JSON:通过jq -n结合--arg参数传递变量,jq会自动处理变量中的特殊字符转义,确保生成的JSON完全符合语法规范。
  • 添加Content-Type请求头:明确告知API请求体为JSON格式,消除潜在的解析歧义。
  • 抛弃手动拼接:彻底避免直接拼接字符串生成JSON,从根源上解决格式破坏问题。

额外提示

  • 若new_content或原始content包含多行文本、特殊符号等复杂内容,jq都能正确处理转义,无需额外操作。
  • 确保系统已安装jq工具,未安装可通过包管理器安装(如Debian/Ubuntu用apt install jq,macOS用brew install jq)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:23:11