Извлеките запись jq только при совпадении имени и фамилии - PullRequest
0 голосов
/ 13 июля 2020

Я могу получить имя и день рождения,

{
  "users": [
    {
      "first": "Stevie",
      "last": "Wonder",
      "birthday": "01/01/1945"
    },
    {
      "first": "Michael",
      "last": "Jackson",
      "birthday": "03/23/1963"
    }
  ]
}

Итак, с помощью этой команды jq я могу получить запись:

$ cat a.json |jq '.users[] | .first + " " + .last + " " + .birthday'
"Stevie Wonder 01/01/1945"
"Michael Jackson 03/23/1963"

И я близок к ответу, чтобы соответствовать имя

$ cat a.json |jq '.users[] | select(.first=="Stevie") | .birthday '
"01/01/1945"

Но как получить результат, совпадающий с именем и фамилией?

1 Ответ

1 голос
/ 13 июля 2020

Вот подход, который начинается с фильтрации .users, не соответствующих вашим критериям:

.users |= map(select(
  (.first == "Stevie") and (.last == "Wonder")
))

если вы Попробуйте онлайн! вы увидите, что это упрощает ваши данные чтобы просто

{
  "users": [
    {
      "first": "Stevie",
      "last": "Wonder",
      "birthday": "01/01/1945"
    }
  ]
}

Затем вы можете добавить больше фильтров, если хотите, чтобы определенные элементы (например, .birthday):

  .users |= map(select(
    (.first == "Stevie") and (.last == "Wonder")
  ))
| .users[].birthday

получили Попробуйте онлайн!

"01/01/1945"

Это может показаться излишне избыточным, но может быть проще, если вы экспериментируете без точных требований.

...