bash脚本的JSON编码问题



我正在尝试创建一个脚本来自动在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"}

相关内容

  • 没有找到相关文章

最新更新