Щоб отримати клавіші верхнього рівня у вигляді потоку, ви можете скористатися вбудованою функцією keys[]
. Отже, одним із вирішень вашої конкретної проблеми буде:
jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"'
keys
виробляє імена ключів у відсортованому порядку; якщо ви хочете, щоб вони були в оригінальному порядку, використовуйте keys_unsorted
.
Іншою альтернативою, яка видає ключі в оригінальному порядку, є:
jq -r 'to_entries[] | "\(.key), \(.value | .ip)"'
Вихід CSV та TSV
Тут також варто розглянути фільтри @csv та @tsv, наприклад
jq -r 'to_entries[] | [.key, .value.ip] | @tsv'
виробляє:
host1 10.1.2.3
host2 10.1.2.2
host3 10.1.18.1
Вбудовані об'єкти
Якщо цікаві ключі вбудовані, як у наступному прикладі, jq-фільтр потрібно було б змінити за показаними рядками.
Вхідні дані:
{
"myhosts": {
"host1": { "ip": "10.1.2.3" },
"host2": { "ip": "10.1.2.2" },
"host3": { "ip": "10.1.18.1" }
}
}
Модифікація:
jq -r '.myhosts | keys[] as $k | "\($k), \(.[$k] | .ip)"'