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

У меня есть файл JSON, который выглядит примерно так:

{
    "people": {
        "company": "Acme",
        "department": "Dev",
        "perks": {
            "eat": "pizza",
            "drink": "beer",
            "play": "twister"
        },
        "names": [{
                "last_name": "Smith",
                "first_names": [{
                        "name": "Bill"
                    },
                    {
                        "name": "Alice"
                    },
                    {
                        "name": "Mary"
                    }
                ]
            },
            {
                "last_name": "Brown",
                "first_names": [{
                        "name": "Gil"
                    },
                    {
                        "name": "Bob"
                    },
                    {
                        "name": "Mary"
                    }
                ]
            },
            {
                "last_name": "Sanchez",
                "first_names": [{
                        "name": "Gil"
                    },
                    {
                        "name": "Jose"
                    },
                    {
                        "name": "Marlena"
                    }
                ]
            }
        ]
    }
}

Вывод, который я ищу:

acme
Dev
twister
Smith, Bill
Smith, Alice
Smith, Mary
Brown, Gil
Brown, Bob
Brown, Mary
Sanchez, Gil
Sanchez, Jose
Sanchez, Marlena

У меня есть запрос jq, который получает имена:

jq -r '.people | .names[] | "\(.last_name), \(.first_names[].name)"'

И у меня есть запрос, который возвращает мне первые 3 строки (Acme, Dev, twister):

jq -r '.people | .company, .department, .perks.play'

Но когда я пытаюсь их объединить (слишком многоспособы перечислить здесь!) я получаю ошибку.Я не знаю, как их объединить, чтобы запрос прошел первый уровень ниже «.people», а затем уровень ниже «.people.names []» (все в одном запросе).

1 Ответ

1 голос
/ 28 сентября 2019

Просто используйте оператор ",", чтобы объединить два запроса, например,

.people
| (.company, .department, .perks.play),
  (.names[] | "\(.last_name), \(.first_names[].name)")
...