【问题标题】:Passing file as string for Github Gist REST API将文件作为字符串传递给 Github Gist REST API
【发布时间】:2014-11-25 19:50:08
【问题描述】:

我正在编写一个脚本,试图通过 Github 的 API 发送 Gist。所有请求都需要采用以下 JSON 格式:

{
    "description": "the description for this gist",
    "public": true,
    "files": {
        "file1.txt": {
           "content": "String file contents"
        }
    }
}

我对“内容”字段的格式应该如何完成感到困惑。我正在尝试在“内容”字段中发送一个代码文本文件,例如

if(n <= 3)
  n++;
else
  n--;

如果我用换行符附加所有行(即“n++”;->“n++;\n”)并转义其他字符,如反斜杠和引号,那么我可以将文件作为 JSON 看起来像这样的字符串发送:

{
    "description": "the description for this gist",
    "public": true,
    "files": {
        "file1.txt": {
           "content": "if(n<=3)\nn++;\nelse\nn--;"
        }
    }
}

,但所有缩进都丢失了,Gist 最终看起来像这样:

if(n <= 3)
n++;
else
n--;

如果我将文件作为 base64 编码字符串发送,则会收到 JSON 解析错误。我正在将 JSON 写入文本文件并使用 curl 发送请求,如下所示

curl --user user -X POST -H 'Content-Type application/json' -d @test.txt https://api.github.com/gists

那么,我必须通过哪些选项来发送保留缩进的文本文件的内容?我目前正在用 bash 编写脚本,但如果有一种为这种情况设计的具有解析功能的语言,我愿意改用它。

有没有什么方法可以将保存在缩进状态的文件作为这个 JSON 对象的字符串文字发送?我是不是对 API 有误解?

【问题讨论】:

  • 试图达到同样的效果。我认为这应该使用文件的 base64 编码来完成,但我的测试失败了。 { "description": "这个要点的描述", "public": true, "files": { "file1.txt": { "content": "U3RyaW5nIGZpbGUgY29udGVudHMK", "encoding": "base64" } } }

标签: json bash curl github github-api


【解决方案1】:

看看你的字符串:

"content": "if(n<=3)\nn++;\nelse\nn--;"

如果有缩进,你会在字符串中看到它:

"content": "if(n<=3)\n  n++;\nelse\n  n--;"

由于您编写的代码中存在错误,您的 bash 脚本会去除缩进。这通常是由于未能引用,或使用了不正确的while read 循环。你的脚本不包括在内,所以我不能说在哪里。

您可以通过使用jq 而不是试图转义您自己的数据来避免所有这些错误和更多错误:

$ cat file
if(n <= 3)
  n++;
else
  n--;

$ jq -R -s . file
"if(n <= 3)\n  n++;\nelse\n  n--;\n"

【讨论】:

  • 非常感谢!我实际上没有考虑 while read 循环将所有行连接在一起并保存前导空格。我在 bash 中实现了它,一切都运行良好:) jq 读起来很有趣,但是敲出 while 读取循环比安装 jq 更容易。
【解决方案2】:

您可以使用 sed 将文件转换为内容字符串。

cat <<END
{
  "description":"filename",
  "public":false,
  "files": {
    "filename": {
    "content":"$(sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'  -e 's/$/\\n/' <filename)"
    }
  }
}
END

查看我的gistpost 脚本。非常基本和粗糙,但它的工作原理

【讨论】:

    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多