Show HN: jnv: bộ lọc JSON tương tác dùng `jq`
(github.com/ynqa)- jnv là một công cụ được tạo ra để duyệt JSON, cung cấp đồng thời trình xem JSON tương tác và trình chỉnh sửa bộ lọc
jq - Việc áp dụng bộ lọc dùng jaq, nên người dùng không cần tự chuẩn bị
jqriêng - Đầu vào hỗ trợ tệp và stdin, đồng thời có thể xử lý không chỉ một JSON đơn lẻ mà cả nhiều cấu trúc JSON như JSON Lines có thể được giải tuần tự bằng
StreamDeserializer - Có thể điều chỉnh hiển thị gợi ý, độ phản hồi của UI, hành vi của trình chỉnh sửa, kiểu của trình xem JSON, cách hiển thị và hoạt động của tự động hoàn thành, cùng phím tắt bằng cấu hình TOML
- Tự động hoàn thành chỉ hỗ trợ các chức năng
jqgồm Identity, Object Identifier-Index, Array Index; trong v0.7.0 cú pháp cấu hình TOML đã thay đổi nhưng không có công cụ migration
Các tính năng jnv cung cấp
- jnv là công cụ tương tác để duyệt JSON, cung cấp trình xem JSON và trình chỉnh sửa bộ lọc
jq - Có thể áp dụng syntax highlighting cho JSON
- Việc áp dụng bộ lọc
jqsử dụng jaq- Người dùng không cần tự chuẩn bị
jq
- Người dùng không cần tự chuẩn bị
- Lấy cảm hứng từ jid và jiq
Định dạng đầu vào và chỉnh sửa bộ lọc
- Đầu vào có thể nhận từ tệp hoặc stdin
- Dữ liệu có thể là một JSON đơn lẻ hoặc nhiều cấu trúc JSON
- Nhiều cấu trúc JSON phải ở định dạng có thể được giải tuần tự bởi StreamDeserializer
- Ví dụ bao gồm JSON Lines
- Tự động hoàn thành bộ lọc được hỗ trợ ở mức hạn chế
- Có thể hiển thị thông báo gợi ý để hỗ trợ đánh giá bộ lọc
Cách cài đặt
- Có thể cài bằng Homebrew
brew install jnv- hoặc
brew install ynqa/tap/jnv
- Có thể cài bằng MacPorts
sudo port install jnv
- Có thể dùng trên Nix / NixOS
nix-shell -p jnv
- Có thể cài đặt hoặc chạy qua conda-forge
pixi global install jnvcat data.json | pixi exec jnvconda install jnv
- Docker cung cấp ví dụ tự build image để chạy
- Tài liệu cho biết image sẽ được cung cấp ở đâu đó trên registry trong tương lai gần
- Có thể cài bằng Cargo
cargo install jnv
Ví dụ sử dụng và tùy chọn CLI
- Có thể chạy bằng tệp hoặc đầu vào chuẩn
cat data.json | jnvjnv data.json
- Trong môi trường UNIX, khi thoát có thể ghi kết quả hiện tại ra stdout
cat data.json | jnv --write-to-stdout | some-commandcat data.json | jnv -- --write-to-stdout > result.json
- Cú pháp sử dụng cơ bản là
jnv [OPTIONS] [INPUT] [INPUT]là đường dẫn tệp JSON tùy chọn- Nếu không chỉ định hoặc chỉ định
-thì sẽ đọc từ đầu vào chuẩn
- Nếu không chỉ định hoặc chỉ định
- Các tùy chọn chính như sau
-c,--config <CONFIG_FILE>: chỉ định đường dẫn tệp cấu hình--default-filter <DEFAULT_FILTER>: chỉ định bộ lọcjqmặc định áp dụng cho dữ liệu đầu vào--write-to-stdout: khi thoát, xuất kết quả JSON hiện tại ra stdout-h,--help: hiển thị trợ giúp-V,--version: hiển thị phiên bản
Thao tác phím
- Các phím tắt chung cung cấp hành vi cơ bản dùng xuyên suốt trình chỉnh sửa và trình xem JSON
Ctrl + C: thoátCtrl + Q: sao chép bộ lọcjqvào clipboardCtrl + O: sao chép JSON vào clipboardShift + ↑,Shift + ↓: chuyển sang chế độ khác
- Editor mode là chế độ mặc định
Tab: nhập gợi ý←,→: di chuyển con trỏ sang trái/phảiCtrl + A,Ctrl + E: di chuyển đến đầu và cuối dòngBackspace: xóa ký tự phía trước con trỏCtrl + U: xóa toàn bộ dòngAlt + B,Alt + F: di chuyển đến vị trí trước hoặc sau dựa trên ký tự gần nhất trong.,|,(,),[,]Ctrl + W,Alt + D: xóa đến vị trí trước hoặc sau dựa trên cùng tập ký tự đó
- Khi đang ở trạng thái gợi ý tự động hoàn thành, dùng
Tabhoặc↓để chọn gợi ý tiếp theo, và↑để chọn gợi ý trước đó - JSON viewer mode cung cấp duyệt JSON và điều khiển thu gọn
↑,Ctrl + K: di chuyển lên↓,Ctrl + J: di chuyển xuốngCtrl + H: di chuyển đến mục cuối cùngCtrl + L: di chuyển đến mục đầu tiênEnter: bật/tắt thu gọnCtrl + P: mở rộng tất cảCtrl + N: thu gọn tất cả
Cấu hình TOML
- jnv cho phép tùy biến nhiều tính năng bằng tệp cấu hình TOML
- Thứ tự ưu tiên nạp tệp cấu hình là đường dẫn
-choặc--configđược chỉ định trên dòng lệnh trước, sau đó đến đường dẫn tệp cấu hình mặc định - Vị trí tệp cấu hình mặc định khác nhau theo từng nền tảng
- Linux:
~/.config/jnv/config.toml - macOS:
~/Library/Application Support/jnv/config.toml - Windows:
C:\Users\{Username}\AppData\Roaming\jnv\config.toml
- Linux:
- Nếu không có tệp cấu hình, nó sẽ được tự động tạo ở lần chạy đầu tiên
- Trong v0.7.0, cú pháp cấu hình TOML như
default.tomlđã thay đổi, và các ví dụ phản ánh định dạng mới- Không có công cụ migration cho thay đổi này
config.tomlcục bộ cần được thay thế hoặc cập nhật thủ công để phù hợp cú pháp mới
- Tùy theo loại terminal và môi trường, ký tự và kiểu hiển thị có thể không được thể hiện đúng
- Một số phím tắt và ký tự trang trí có thể không hiển thị hoặc hoạt động đúng trên một số terminal emulator
Các mục cấu hình có thể điều chỉnh
- Có thể đặt
no_hintđể ẩn thông báo gợi ý - Cấu hình trình chỉnh sửa có thể được điều chỉnh riêng cho trạng thái có focus và không có focus
- Chế độ nhập dùng
InsertvàOverwrite - Có thể chỉ định danh sách ký tự ranh giới từ để xác định hành vi di chuyển con trỏ và xóa
- Có thể chỉ định ký tự tiền tố, kiểu tiền tố, kiểu ký tự dưới con trỏ và kiểu cho các ký tự còn lại
- Chế độ nhập dùng
- Cấu hình hiển thị JSON bao gồm thụt lề, kiểu dấu ngoặc, kiểu của khóa và giá trị, thuộc tính dòng được chọn, và cách xử lý khi vượt quá chiều rộng
- Với đầu vào dạng stream, có thể giới hạn số lượng đối tượng JSON tối đa cần xử lý bằng
max_streams - Đây là cấu hình nhằm giảm sử dụng bộ nhớ khi xử lý luồng dữ liệu lớn; nếu không chỉ định thì sẽ không có giới hạn
- Với đầu vào dạng stream, có thể giới hạn số lượng đối tượng JSON tối đa cần xử lý bằng
- Cấu hình tự động hoàn thành điều chỉnh kích thước chunk cho kết quả tìm kiếm và tải nền
- Giá trị càng lớn thì việc hiển thị kết quả hoặc hoàn tất tải có thể nhanh hơn, nhưng sẽ dùng nhiều bộ nhớ hơn
- Phím tắt có thể được cấu hình theo từng nhóm: thoát, sao chép truy vấn, sao chép kết quả, chuyển chế độ, thao tác trình chỉnh sửa và thao tác trình xem JSON
- Cấu hình độ phản hồi UI điều chỉnh độ trễ xử lý đầu vào, độ trễ vẽ lại sau khi đổi kích thước cửa sổ, và khoảng thời gian animation spinner
1 bình luận
Ý kiến trên Hacker News
Tuyệt. Một điểm hơi tiếc là ngay cả với JSON cỡ trung bình (16MB) cũng rất chậm, và màu chữ quá tối (đã gửi PR)
Khi tìm một lựa chọn thay thế có hiệu năng tốt, tôi thấy fx (https://fx.wtf); nó không có tính năng jq nhưng là một trình xem JSON nhanh
Trông hay đấy. Điều tôi luôn thấy khó chịu ở jq là trước khi chạy, tôi không thể biết mình sẽ lấy ra dữ liệu gì
https://github.com/TomConlin/json_to_paths
Rất đáng mong đợi. Chắc chắn tôi sẽ thử xem
Từ trước đến nay tôi dùng jq cùng với up [0] cho truy vấn tương tác, nhưng không thích trải nghiệm người dùng của up lắm. Đặc biệt bất tiện với truy vấn dài hoặc dữ liệu không phải ASCII, nên tôi muốn tìm một lựa chọn thay thế
[0]: https://github.com/akavel/up
Rất hay. Vừa chạm được vào laptop là tôi sẽ cài ngay
Trước đây tôi từng làm một thứ tương tự nên bài này lập tức thu hút tôi
https://github.com/bigH/interactively.git
Tôi nghĩ có thể khái quát hóa ý tưởng này hơn nữa để gắn giao diện tương tác cho nhiều lệnh hơn trong CLI. Từ lâu tôi đã hình dung một “trình dựng lệnh” có thể tải tài liệu phù hợp theo vị trí con trỏ và hiển thị trong lúc chỉnh sửa dòng lệnh
Rất tuyệt. Không biết có phải đòi hỏi quá nhiều không, nhưng tôi tò mò liệu có thể điều chỉnh để nó cũng hoạt động với OjG, vốn dùng JSONPath thay vì cú pháp jq, hay không. Nếu được thì tôi sẵn lòng giúp
Trông ổn. Có vẻ khá gần với jless (https://github.com/PaulJuliusMartinez/jless)
Mọi người cũng nên biết đến fx như một lựa chọn thay thế
Nó làm được nhiều thứ hơn hẳn như
map,filter,reduce, và ngữ nghĩa cũng gần với những gì đã quen thuộc hơn. Nó cũng hỗ trợ YAMLhttps://fx.wtf/getting-started
Khi tìm một công cụ để lọc và xem động các tệp log JSONL, tôi đã dùng VisiData
Nếu bạn xử lý JSONL (JSON Lines) thì rất khuyến nghị
Tôi đã nghĩ việc này có lẽ chỉ cần fzf cũng làm được
[0]: https://dev.to/pbnj/fzf-jq-interactive-jq-15no
Demo: https://asciinema.org/a/349330
Nếu dùng Sublime Text, cũng có một plugin làm được việc tương tự [0]
Nhân tiện, plugin này là do tôi tạo từ trước
[0]: https://packagecontrol.io/packages/Jq