如何用jq将多行JSON转为无引号CSV?无需指定所有键
解决JSON行转无引号CSV的问题
嘿,针对你这个需求,我有几个实用的方案,既能避免手动指定键,又能去掉不必要的双引号,咱们来看:
方案1:纯jq实现(最推荐)
不用依赖额外工具,直接让jq输出不带引号的逗号分隔内容就行。把你原来的@csv换成join(",")——因为@csv是按照CSV规范自动添加引号的,而join就是简单的字符串拼接:
jq -r '[.[]] | join(",")' in.txt > out.txt
解释一下:
[.[]]:把当前JSON对象的所有值提取出来,组成一个数组(不管有多少个键,都会自动全部提取)join(","):把数组里的元素用逗号直接连接,输出就是v1,v2,...这种格式,完全没有双引号
方案2:jq + sed(适合需要保留CSV规范但临时去引号的场景)
如果你还是想用@csv生成标准CSV,再去掉引号,也可以用sed精准替换。不过要注意:如果你的JSON值本身包含双引号或者逗号,这种方法可能会破坏内容,但如果确定值里没有这些特殊字符,就可以用:
jq -r '[.[]] | @csv' in.txt | sed 's/"//g' > out.txt
这里sed 's/"//g'是全局替换掉所有双引号,简单直接。
补充说明
如果你的JSON值里可能存在逗号、双引号这类CSV特殊字符,其实保留双引号才是符合CSV规范的,这样后续用工具解析CSV时才不会出错。但如果你的场景里确定值都是纯文本、没有特殊字符,那上面的方案就完全适用啦。
内容的提问来源于stack exchange,提问作者Serg
相关产品推荐
相关产品推荐

