我正在尝试解析包含斜线和后斜线序列的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
正向斜线字符是合法的,但是单个后斜切字符不是。根据json.org char描述,有效的字符为:
char 任何nunicode-character- 除 - " - " - 或 - - 或 - 控制特征 " \ / b F n r t u四赫克数
因此,在您的示例中,单个后斜线不是合法的,您需要" \",它被解释为双重刷新,或者您需要完全删除它们。
如果您想包括文字反弹:
(bash)
echo '{"tag_string":"/\/\/\ test"}' | jq
{
"tag_string": "/\/\/\ test"
}
echo '{"tag_string":"/\/\/\ test"}' | jq -r '.["tag_string"]'
/// test
(SH)
echo '{"tag_string":"/\\/\\/\\ test"}' | jq -r '.["tag_string"]'
/// test
printf "%s" '{"tag_string":"/\/\/\ test"}' | jq -r '.["tag_string"]'
/// test
如果要使用非json字符串转换文件,请考虑使用任何json之类的工具。使用" cson-to-json"模式" /"将被解释为"/":
$ any-json -format=cson
输入:
{"tag_string":"/// test"}
输出:
{
"tag_string": "/// test"
}