
[英]Convert a Single line of JSON to csv using jq in shell bash script
[英]Shell jq is adding header to every other line in csv output, not just once at the top
我正在使用这种格式从json
中提取密钥:
[
{
"k1":{"k2":4},
"k3":{"k2":6}
}
]
[
{
"k1":{"k2":4},
"k3":{"k2":6}
}
]
我正在使用这个命令["a","b"], (.[] | [.k1.k2,.k3.k2]) | @csv
["a","b"], (.[] | [.k1.k2,.k3.k2]) | @csv
提取两个键并向 csv 添加两个标题( a
, b
)。 但是这个的输出是每隔一行的一个标题:
"\"a\",\"b\""
"4,6"
"\"a\",\"b\""
"4,6"
你可以在这个jq play中看到这一点。 如何更改过滤器以仅将标题放在第一行?
由于您的 json 中有流,因此您需要inputs<\/code>而不是
.[]<\/code>
jq -nr '(["a","b"], (inputs | map(.k1.k2,.k3.k2))) | @csv' input-json
您的输入是 JSON 文档流。 因此,您的过滤器会为每个文档执行一次,包括构建标题。
一种解决方案是使用
--slurp<\/code>或
-s<\/code>选项将流作为数组读取。
但是,这将需要在您的迭代中更深入一层(
.[][]<\/code>而不仅仅是
.[]<\/code> ):
jq -s '["a","b"], (.[][] | [.k1.k2,.k3.k2]) | @csv'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.