我正在尝试创建一个脚本来自动在GitHub上发布问题,但是我在JSON编码方面遇到了问题。我想使用文件的内容作为问题的正文。相关文件包含多行和一些特殊字符。当我运行以下脚本时,它会在 GitHub 上成功创建问题,但问题的正文似乎一团糟。文件的所有行最终都被连接起来,特殊字符无法正确显示。
有没有办法解决这个问题?下面是我的代码,谢谢!
FILES=*
for f in $FILES; do
if [ $f == "script" ]; then
continue;
fi
body=$(cat $f)
echo "{"title": "title", "body": "$body"}" > body.temp
curl -i -H "Content-Type: application/json" -u "$1:$2" -d @body.temp -X POST https://api.github.com/repos/$f/testing/issues
rm -rf body.temp
done
如果你看一下JSON规范,你会发现一个字符串可以包含任何Unicode字符,除了"
、和控制字符(当未转义时)。
我不能具体评论 github 的 JSON 解析器,但你几乎肯定想转义文件内容。以下是在循环体中使用 Perl 单行代码来执行转义的方法:
body=$(perl -ne 'chomp; s/\/\\/; s/"/\"/g; print $_ ."\n"' $f)
echo "{"title": "title", "body": "$body"}" > body.temp
测试它:
$ cat >somefile
a
"b"
c
$ body=$(perl -ne 'chomp; s/\/\\/; s/"/\"/g; print $_ ."\n"' somefile)
$ echo "{"title": "title", "body": "$body"}" > body.temp
$ cat body.temp
{"title": "title", "body": "an"b"n\cn"}