8 csv string quotes ffprobe jq
我正在尝试使用重新格式化asjq
生成的 JSON 输出的某些元素。我很接近(在我看来),但在细节上遇到了困难:ffprobe
csv
我正在 MacOS Mojave (10.14.6) 上运行 jq ( jq --version
=> )最近的 d/l 二进制文件jq-1.6
从我的 Mac 终端上,我的结果是:
\n\n$ fn_ffprobeall | jq -r \'[.format.filename,.format.format_name,.format.tags.album_artist] | @csv\'\n"01 Jubilee.flac","flac","Bill Charlap Trio"\n\n# where fn_ffprobeall is a function defined as: \nfn_ffprobeall () { ffprobe -i "01 Jubilee.flac" -hide_banner -v quiet -print_format json -show_format -show_streams; }\n
Run Code Online (Sandbox Code Playgroud)\n\n但这个jq
输出(如上所示)不是我需要的...我需要不带引号的值""
。根据文档--raw-output / -r
:
\n\n\n使用此选项,如果 filter\xe2\x80\x99s 结果是字符串,那么它将直接写入标准输出,而不是格式化为带引号的 JSON 字符串。这对于使 jq 过滤器与非基于 JSON 的系统对话非常有用。
\n
@tsv
另外,使用而不是@csv
“做正确的事”似乎很奇怪,因为引号将被删除。我想人们可以做一些额外的工作来用 替换tab
chars ,
,但我想知道在回到这种方法之前我是否遗漏了一些东西。
该--raw-output
选项无法控制传递给 的字符串@csv
,因为那时它们不是过滤器的最终结果。他们被引用是因为@csv
引用了他们。
jq
将 的结果@csv
视为单个字符串输出值。该--raw-output
选项的工作方式如文档中所述,它不会将输出中的字符串结果编码为 JSON。
如果您尝试不使用该选项,您将看到输出为"\"01 Jubilee.flac\",\"flac\",\"Bill Charlap Trio\""
,这是一个正确编码的 JSON 字符串。它有引号,并且转义了不允许的字符。您只需选中和取消选中https://jqplay.org/s/OerK1MlARSRaw Output
上的选项即可看到这种差异。
如果您想要 CSV 中不带引号的字符串,您可以使用join(",")
代替@csv
,但当某些字符串本身包含逗号时,它不会很好地工作。