gpt4 book ai didi

string - 为什么 jq --raw-output 参数无法从 @csv 输出中删除引号?

转载 作者:行者123 更新时间:2023-12-04 02:38:50 24 4
gpt4 key购买 nike

我正在尝试使用 jq重新格式化由 ffprobe 生成的 JSON 输出的某些元素如 csv .我很接近(在我看来),但在一个细节上挣扎:

我的 ffprobe output is shown in the jq 1.6 playground

我最近在 MacOS Mojave (10.14.6) 上运行 jq ( jq --version => jq-1.6 ) 的 d/l 二进制文件

从 Mac 上的终端,我的结果是:

$ fn_ffprobeall | jq -r '[.format.filename,.format.format_name,.format.tags.album_artist] | @csv'
"01 Jubilee.flac","flac","Bill Charlap Trio"

# where fn_ffprobeall is a function defined as:
fn_ffprobeall () { ffprobe -i "01 Jubilee.flac" -hide_banner -v quiet -print_format json -show_format -show_streams; }

但是这个 jq输出(如上所示)不是我需要的...我需要没有周围引号的值 "" .根据 the documentation--raw-output / -r :

With this option, if the filter’s result is a string then it will be written directly to standard output rather than being formatted as a JSON string with quotes. This can be useful for making jq filters talk to non-JSON-based systems.



此外,使用 @tsv 似乎很奇怪。而不是 @csv “做正确的事”,因为引号将被删除。我想可以做一些额外的工作来替换 tab带有 , 的字符,但我想知道在回到那种方法之前我是否遗漏了什么。

最佳答案

--raw-output选项,无法控制传递给 @csv 的字符串,因为到那时,它们不是过滤器的最终结果。它们被引用是因为 @csv引用了他们。jq考虑 @csv 的结果作为单个字符串输出值。 --raw-output选项按照文档中的说明工作,它不会将字符串结果编码为 JSON。
如果您尝试不使用该选项,您将看到输出为 "\"01 Jubilee.flac\",\"flac\",\"Bill Charlap Trio\"" ,这是一个正确编码的 JSON 字符串。它有引号,以及转义不允许的字符。
您只需选中和取消选中 Raw Output 即可看到这种差异。选项在 https://jqplay.org/s/OerK1MlARS .
如果你想在 CSV 中使用不带引号的字符串,你可以使用 join(",")代替 @csv ,但是当某些字符串本身包含逗号时,它将无法正常工作。

关于string - 为什么 jq --raw-output 参数无法从 @csv 输出中删除引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60350315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com