JSON dizginizde bazı sözdizimi hatası var. Lütfen kontrol edip düzeltin. Örneğin.
$ 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)
Kıvrımlı parantezlerden birini kaçırıyorsunuz, 3'ü açıyorsunuz, ancak 2'yi kapatıyorsunuz.
Basitleştirilmiş sözdizimi şöyle olmalıdır:
$ 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"
}
O zaman, alıntılardan kaçma meselesi, ama yanlış şekilde kaçıyorsun Tek alıntı dizeler içinde tek tırnak kaçış? Örneğin:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
İkili tırnak içeren harici bir dosyayı içe aktardığınızdan, bunları gibi araçlarla da iki kez alıntı yapmanız gerekir. sed, vb. Yeni satırlarda olduğu gibi, bunları uygun kontrol karakterlerine dönüştürmelisiniz (ya <br> veya \n ) beklenen formata bağlı olarak.
Son örneğiniz şöyle görünür:
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
$gist_contentdeğerlendirilmeyecek.