jq Đầu ra có điều kiện


83

Tôi đang sử dụng jq để chơi với json. Tôi đã tự hỏi làm thế nào để có điều kiện in một cái gì đó trong đó.

Giả sử tôi quan tâm đến một cuộc gọi thực địa geo. Tôi đã sử dụng lệnh sau và phát hiện ra chỉ có một mục nhập geonull:

% cat all.json | jq '.geo != null' | sort | uniq -c              
   1 false
6891 true

Làm cách nào tôi có thể chỉ in ra mục nhập đó mà không in mọi thứ khác?

Không thấy một cái gì đó giống như printlệnh trong sách hướng dẫn. Và điều này không làm việc: cat all.json | jq 'if .place == null then . end'. jqbị phàn nàn về lỗi cú pháp.

Câu trả lời:


143

Bạn có thể sử dụng chức năng chọn để chỉ nhận các mục nhập bắt buộc:

jq 'select(.geo != null)' all.json

22
Các công trình lựa chọn, nhưng để trả lời đầy đủ các câu hỏi mà bạn sẽ cần phải lọc chỉ geo một lần nữa, đường ống JQ bên trong:cat all.json | jq 'select(.geo != null) | .geo' > geo-only.json
Andy Reagan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.