我想从JSON文件中提取数据,并使用jq将其写入CSV文件。
这是我的数据示例:
[
{
"media": {
"track": [
{
"attype": "General",
"FileExtension": "MP4",
"Format": "MPEG-4"
},
{
"attype": "Video",
"Format": "MPEG Video"
}
]
}
},
{
"media": {
"track": [
{
"attype": "General",
"FileExtension": "ts",
"Format": "MPEG-TS"
},
{
"attype": "Video",
"Format": "MPEG Video"
}
]
}
}
]这是所需的输出:
"MP4","MPEG-4","MPEG Video"
"ts","MPEG-TS","MPEG Video"这是我的jq代码:
.[].media.track[] |
[
(select(.attype =="General") | .FileExtension, .Format),
(select(.attype =="Video") | .Format)
] | @csv这是实际的输出:
"MP4","MPEG-4"
"MPEG Video"
"ts","MPEG-TS"
"MPEG Video"我尝试过使用flatten过滤器和不同用法的方括号[]来构造数组,但都无济于事。如何使用jq获得所需的输出
发布于 2019-06-25 22:07:41
您的思路是对的(双关语) --您只需按如下方式扩展.track:
.[].media.track
| [.[]
| (select(.attype =="General") | .FileExtension, .Format),
(select(.attype =="Video") | .Format) ]
| @csv或者..。
如果你觉得所有这些括号和括号太让人分心,你可以这样做:
.[].media.track
| map( if .attype =="General" then .FileExtension, .Format
elif .attype =="Video" then .Format
else empty
end )
| @csv发布于 2019-06-25 22:05:05
一种解决方案是为每个介质而不是每个轨道创建一个单元阵列:
.[].media |
[
.track[] |
(select(.attype =="General") | .FileExtension, .Format),
(select(.attype =="Video") | .Format)
] | @csvhttps://stackoverflow.com/questions/56755346
复制相似问题