我正在尝试解析包含某些字符串中的斜杠和反斜杠序列的json文件,如下所示:
echo '{"tag_string":"/\/\/\ test"}' | jq
给了我:
parse error: Invalid escape at line 1, column 27
我已尝试在不同位置使用反斜杠进行转义,但我似乎无法找到正确的方法。如何输出字符串,而不删除任何字符或出错?
这仅适用于bash,但不适用于sh(或zsh):
echo '{"tag_string":"/\\/\\/\\ test"}' | jq -r '.tag_string'
/\/\/\ test
答案 0 :(得分:2)
正斜杠字符是合法的,但不是单个反斜杠字符。根据{{3}}字符描述,有效字符为:
char any-Unicode-character- except-"-or-\-or- control-character \" \\ \/ \b \f \n \r \t \u four-hex-digits
所以在你的例子中,单个反斜杠是不合法的,你需要" \\"它被解释为双反斜杠,或者你需要完全删除它们。
答案 1 :(得分:0)
如果您尝试包含文字反斜杠:
echo '{"tag_string":"/\\/\\/\\ test"}' | jq
{
"tag_string": "/\\/\\/\\ test"
}
echo '{"tag_string":"/\\/\\/\\ test"}' | jq -r '.["tag_string"]'
/\/\/\ test
echo '{"tag_string":"/\\\\/\\\\/\\\\ test"}' | jq -r '.["tag_string"]'
/\/\/\ test
printf "%s" '{"tag_string":"/\\/\\/\\ test"}' | jq -r '.["tag_string"]'
/\/\/\ test
答案 2 :(得分:0)
如果您尝试使用非JSON字符串转换文件,请考虑使用any-json等工具。使用“cson-to-json”模式,“\ /”将被解释为“/”:
$ any-json -format=cson
输入:
{"tag_string":"/\/\/\ test"}
输出:
{
"tag_string": "/// test"
}