如何在单个字段上使用jq过滤JSON,但显示多个字段?

时间:2019-02-02 04:25:33

标签: json select jq

这是我的示例数据。我需要过滤“名称”​​字段并为每个包含“邮件”的名称打印对名称,URL:

源数据:

 [
     {
         "name": "Yahoo",
         "url": "https://www.yahoo.com/"
     },
     {
         "name": "Yahoo Mail",
         "url": "https://mail.yahoo.com/"
     },
     {
         "name": "Google",
         "url": "https://www.google.com/"
     },
     {
         "name": "Google Mail (Gmail)",
         "url": "https://gmail.com/"
     }
 ]

所需的输出:

Yahoo Mail
https://mail.yahoo.com/
Google Mail (Gmail)
https://gmail.com/

如何在jq中做到这一点?

到目前为止,这可以找到包含“邮件”的所有“名称”,但是我也如何打印“ URL”?

jq -r '.[].name | select(test("Mail";"i"))'

产生输出:

 Yahoo Mail
 Google Mail (Gmail)

1 个答案:

答案 0 :(得分:2)

您的代码选择名称,而您想选择名称的父对象。按照以下步骤可产生所需的输出。

jq -r '.[] | select(.name|test("Mail"; "i"))[]' file