我正在编写一个脚本,尝试通过 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--;"
}
}
}
,但是所有缩进都丢失了,要点最终看起来像这样:
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?
最佳答案
看看你的字符串:
"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"
关于json - 将文件作为字符串传递给 Github Gist REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27135436/