JSON在Bourne Shell上的字符串中斜线和后斜线



我正在尝试解析包含斜线和后斜线序列的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"
}

最新更新