我将已更改文件的git diff插入到JSON对象中,以使用curl请求发送。
问题是它不喜欢插入JSON中的新行字符,但我不知道如何解决这个问题。翻译工具没有用,我使用的这个perl解决方案很接近但只是替换为空格:
changedfiles=$(git diff --name-only $3..$4 | perl -p -e 's/\n/ /')
并将其更改为没有帮助:
changedfiles=$(git diff --name-only $3..$4 | perl -p -e 's/\n/\\n/')
有人能指出我正确的方向吗?它不需要使用perl,它只需要工作 (......简单也会很好)
答案 0 :(得分:0)
我认为你想要做的是用逗号分隔引用的文件列表(即插入JSON字符串):
git diff --name-only $3..$4 | perl -p -e 's/(.*)/"$1",/;s/\n//;s/""/","/'
如果您的文件不包含双引号或需要进行JSON转义的特殊字符,则此方法有效。
首先,我们将文件放在引号后面加一个逗号,然后删除换行符,然后将文件之间的""
更改为","
。虽然,这是一种黑客攻击。可能会更好:
git diff --name-only $3..$4 | perl -p -e '$/="";s/(.*)\n/"$1",/g;s/,$//'
这里我们读完整个输入,换行符和所有内容,替换并删除最后一个逗号。
答案 1 :(得分:0)
不是试图对即时测试发现问题的字符进行临时转义,而是如何使用实际的JSON库以可靠的方式处理所有这些?
以下是使用内联python的bash示例:
python -c '
import json
import sys
print(json.dumps({"data": sys.argv[1]}))
' "$(git diff --name-only $3..$4)"
它打印json对象{ "data": "your command output here" }
,符合标准的转义。