Để nhận các khóa cấp cao nhất dưới dạng luồng, bạn có thể sử dụng chức năng tích hợp sẵn keys[]
. Vì vậy, một giải pháp cho vấn đề cụ thể của bạn sẽ là:
jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"'
keys
tạo ra các tên khóa theo thứ tự đã sắp xếp; nếu bạn muốn chúng theo thứ tự ban đầu, hãy sử dụng keys_unsorted
.
Một giải pháp thay thế khác, tạo ra các khóa theo thứ tự ban đầu, là:
jq -r 'to_entries[] | "\(.key), \(.value | .ip)"'
Đầu ra CSV và TSV
Các bộ lọc @csv và @tsv cũng có thể đáng xem xét ở đây, ví dụ:
jq -r 'to_entries[] | [.key, .value.ip] | @tsv'
sản xuất:
host1 10.1.2.3
host2 10.1.2.2
host3 10.1.18.1
Các đối tượng được nhúng
Nếu các khóa quan tâm được nhúng như trong ví dụ sau, bộ lọc jq sẽ phải được sửa đổi dọc theo các dòng được hiển thị.
Đầu vào:
{
"myhosts": {
"host1": { "ip": "10.1.2.3" },
"host2": { "ip": "10.1.2.2" },
"host3": { "ip": "10.1.18.1" }
}
}
Sửa đổi:
jq -r '.myhosts | keys[] as $k | "\($k), \(.[$k] | .ip)"'