如何用jq实现嵌套JSON的外层字段与内层数据同行输出?
解决嵌套JSON的jq提取问题
示例输入JSON
假设你的JSON结构如下:
{ "data": [ { "startTime": "2024-01-01", "data": [ {"one": "a", "two": "b"}, {"one": "c", "two": "d"} ] }, { "startTime": "2024-01-02", "data": [ {"one": "e", "two": "f"} ] } ] }
正确的jq命令
要得到每行包含startTime、one、two的结果,执行以下命令:
jq -r '.data[] | .startTime as $t | .data[] | [$t, .one, .two] | @tsv'
命令逻辑说明
.data[]:遍历外层data数组的每个对象.startTime as $t:将当前外层对象的startTime存入变量$t,确保内层遍历时不会丢失这个值.data[]:遍历当前外层对象内的内层data数组元素[$t, .one, .two]:把三个目标值组合成数组@tsv:将数组转为制表符分隔的文本,输出每行三个值(如果需要逗号分隔,可替换为join(", "))
输出结果
执行后会得到3行结果:
2024-01-01 a b 2024-01-01 c d 2024-01-02 e f
内容的提问来源于stack exchange,提问作者Eponymous
相关产品推荐
相关产品推荐

