Как фильтровать JSON, используя jq для одного поля, но отображать несколько полей? - PullRequest
0 голосов
/ 02 февраля 2019

Это пример данных, которые у меня есть.Мне нужно отфильтровать поле «имя» и напечатать имя пары, URL для каждого имени, содержащего «mail»:

Исходные данные:

 [
     {
         "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 голосов
/ 02 февраля 2019

Ваш код выбирает имена, тогда как вы хотите выбрать родительские объекты имен.Следование дает желаемый результат.

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