json - 将文件作为字符串传递给 Github Gist REST API

标签 json bash curl github github-api

我正在编写一个脚本,尝试通过 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/

相关文章:

bash - 仅列出与模式匹配的目录名称

azure - 如何使用 webhdfs API 访问 Azure datalake

php - 使用 curl 和 php 将字符串作为文件发送

linux - curl 一个grep的结果?

javascript - Symfony3 - 未定义索引(解码 JSON->对象->数组)

java - GSON:使用 java.util.TreeSet 序列化对象

python - 从 json 创建的 Pandas 数据框具有未命名列 - 由于未命名列问题无法插入 MySQL

java - 为什么我的 Java 代码无法正确执行 bash 命令?

bash - "$(variable)"和 "$(VARIABLE)"有什么区别

json - 使用 SwiftyJSON 反序列化 NSDate