У вас есть какая-то синтаксическая ошибка в вашей строке JSON. Пожалуйста, проверьте и исправьте это. Например
$ echo "{ \"description\": \"Created via API\", \"public\": \"true\", \"files\":{ \"index.php \":{ \"content\": \"$gist_content\"}}\" " | python -m json.tool
Expecting ',' delimiter: line 1 column 95 (char 94)
Итак, вам не хватает одной из фигурных скобок, вы открываете 3, но закрываете 2.
Упрощенный синтаксис должен быть таким:
$ echo '{"description": "Created via API", "public": "true", "files": { "index.php": { "content": "foo" } } }' | python -m json.tool
{
"description": "Created via API",
"files": {
"index.php": {
"content": "foo"
}
},
"public": "true"
}
Тогда нужно избегать кавычек, но вы избегаете этого неправильно, см .: Как избежать одиночных кавычек в одиночных кавычках? Например:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
Поскольку вы импортируете внешний файл, который также состоит из двойных кавычек, вы должны также заключить их в двойные кавычки, используя такие инструменты, как sed
и т.д. То же самое с новыми строками, вы должны заменить их на соответствующие управляющие символы (либо <br>
либо \n
) в зависимости от ожидаемого формата.
Итак, ваш последний пример будет выглядеть так:
gist_content=$(cat index.php | sed 's/"/\\"/g' | paste -s -d '\\n' -)
curl --user "GITHUB_USER" -H "Content-Type: application/json; charset=UTF-8" -X POST -d "{"\""description"\"": "\""Created via API"\"", "\""public"\"": "\""true"\"", "\""files"\"": { "\""index.php"\"": { "\""content"\"": "\""$gist_content"\"" } } }" https://api.github.com/gists