仅打印数组属性内的对象的一个​​属性以及jq中数组属性的同级属性

问题描述

我有一个看起来像这样的json文件

[
  {
    "code": "1234","files": [
        {
            "fileType": "pdf","url": "http://.../a.pdf"
        },{
            "fileType": "video","url": "http://.../b.mp4"
        }
    ]
  },{
    "code": "4321","url": "http://.../c.pdf"
        },"url": "http://.../d.mp4"
        }
    ]
  },{
    "code": "9999","url": "http://.../e.pdf"
        }
    ]
  }
]

我只想打印fileType数组中video == files文件,以便最终得到如下输出

1234,"http://.../b.mp4"
4321,"http://.../d.mp4"

到目前为止,我只能输出如下所示的内容

1234,"http://.../a.pdf","http://.../b.mp4",4321,"http://.../c.pdf","http://.../d.mp4"

使用以下内容

jq -r '.[] | select(.files[]?.fileType == "video") | [.code,.files[].url] | @csv'

我想知道如何在输出.files[]的基础上过滤fileType

解决方法

下面的管道使该解决方案相当不言自明,假设人们了解基本语法和-r命令行选项:

< input.json jq -r '
  .[]
  | .code as $code
  | .files[]
  | select(.fileType == "video")
  | "\($code),\"\(.url)\""
'