- jnv adalah alat yang dibuat untuk menelusuri JSON, menyediakan viewer JSON interaktif sekaligus editor filter
jq - Untuk menerapkan filter, jaq digunakan, sehingga pengguna tidak perlu menyiapkan
jqsecara terpisah - Input mendukung file dan stdin, serta dapat menangani bukan hanya satu JSON, tetapi juga beberapa struktur JSON seperti JSON Lines yang dapat dideserialisasi dengan
StreamDeserializer - Melalui konfigurasi TOML, pengguna dapat menyesuaikan tampilan hint, responsivitas UI, perilaku editor, gaya viewer JSON, tampilan dan perilaku autocomplete, serta key binding
- Autocomplete hanya mendukung fitur
jqIdentity, Object Identifier-Index, dan Array Index; pada v0.7.0 sintaks konfigurasi TOML berubah, tetapi tidak tersedia alat migrasi
Fitur yang disediakan jnv
- jnv adalah alat interaktif untuk menelusuri JSON, menyediakan viewer JSON dan editor filter
jq - Syntax highlighting dapat diterapkan pada JSON
- Untuk menerapkan filter
jq, jnv menggunakan jaq- Pengguna tidak perlu menyiapkan
jqsendiri
- Pengguna tidak perlu menyiapkan
- Terinspirasi oleh jid dan jiq
Format input dan pengeditan filter
- Input dapat diterima dari file atau stdin
- Data dapat berupa satu JSON atau beberapa struktur JSON
- Beberapa struktur JSON harus dalam format yang dapat dideserialisasi oleh StreamDeserializer
- Contohnya termasuk JSON Lines
- Autocomplete filter didukung secara terbatas
- Pesan hint dapat ditampilkan untuk membantu evaluasi filter
Cara instalasi
- Dapat diinstal dengan Homebrew
brew install jnv- atau
brew install ynqa/tap/jnv
- Dapat diinstal dengan MacPorts
sudo port install jnv
- Dapat digunakan di Nix / NixOS
nix-shell -p jnv
- Dapat diinstal atau dijalankan melalui jalur conda-forge
pixi global install jnvcat data.json | pixi exec jnvconda install jnv
- Untuk Docker, tersedia contoh membangun image sendiri lalu menjalankannya
- Disebutkan bahwa image akan disediakan di salah satu registry dalam waktu dekat
- Dapat diinstal dengan Cargo
cargo install jnv
Contoh penggunaan dan opsi CLI
- Dapat dijalankan dengan file atau input standar
cat data.json | jnvjnv data.json
- Di lingkungan UNIX, hasil saat ini dapat ditulis ke stdout saat keluar
cat data.json | jnv --write-to-stdout | some-commandcat data.json | jnv -- --write-to-stdout > result.json
- Bentuk penggunaan dasar adalah
jnv [OPTIONS] [INPUT] [INPUT]adalah path file JSON opsional- Jika tidak ditentukan atau
-diberikan, jnv membaca dari input standar
- Jika tidak ditentukan atau
- Opsi utama adalah sebagai berikut
-c,--config <CONFIG_FILE>: menentukan path file konfigurasi--default-filter <DEFAULT_FILTER>: menentukan filterjqdefault yang diterapkan ke data input--write-to-stdout: mencetak hasil JSON saat ini ke stdout saat keluar-h,--help: menampilkan bantuan-V,--version: menampilkan versi
Operasi tombol
- Key binding umum menyediakan perilaku dasar di seluruh editor dan viewer JSON
Ctrl + C: keluarCtrl + Q: menyalin filterjqke clipboardCtrl + O: menyalin JSON ke clipboardShift + ↑,Shift + ↓: beralih ke mode lain
- Editor mode adalah mode default
Tab: memasukkan saran←,→: menggerakkan kursor ke kiri/kananCtrl + A,Ctrl + E: berpindah ke awal dan akhir barisBackspace: menghapus karakter sebelum kursorCtrl + U: menghapus seluruh barisAlt + B,Alt + F: berpindah ke posisi sebelumnya atau berikutnya berdasarkan karakter terdekat di antara.,|,(,),[,]Ctrl + W,Alt + D: menghapus hingga posisi sebelumnya atau berikutnya berdasarkan kumpulan karakter yang sama
- Dalam status saran autocomplete, pilih saran berikutnya dengan
Tabatau↓, dan pilih saran sebelumnya dengan↑ - JSON viewer mode menyediakan navigasi JSON dan kontrol collapse/expand
↑,Ctrl + K: bergerak ke atas↓,Ctrl + J: bergerak ke bawahCtrl + H: berpindah ke item terakhirCtrl + L: berpindah ke item pertamaEnter: toggle collapse/expandCtrl + P: expand semuaCtrl + N: collapse semua
Konfigurasi TOML
- jnv menyesuaikan berbagai fitur melalui file konfigurasi TOML
- Prioritas pemuatan file konfigurasi dimulai dari path
-catau--configyang ditentukan di command line, lalu path file konfigurasi default - Lokasi file konfigurasi default berbeda menurut platform
- Linux:
~/.config/jnv/config.toml - macOS:
~/Library/Application Support/jnv/config.toml - Windows:
C:\Users\{Username}\AppData\Roaming\jnv\config.toml
- Linux:
- Jika file konfigurasi tidak ada, file akan dibuat otomatis saat pertama kali dijalankan
- Pada v0.7.0, sintaks konfigurasi TOML seperti
default.tomlberubah, dan contoh mencerminkan format baru- Alat migrasi untuk perubahan ini tidak disediakan
config.tomllokal harus diganti atau diperbarui sendiri agar sesuai dengan sintaks baru
- Tergantung jenis terminal dan lingkungan, karakter serta gaya mungkin tidak ditampilkan dengan benar
- Key binding tertentu dan karakter dekoratif mungkin tidak tampil atau tidak berfungsi di beberapa emulator terminal
Item konfigurasi yang dapat disesuaikan
- Apakah pesan hint disembunyikan dapat diatur dengan
no_hint - Pengaturan editor dapat disesuaikan secara terpisah untuk status fokus dan tidak fokus
- Mode input menggunakan
InsertdanOverwrite - Daftar karakter batas kata dapat ditentukan untuk mengatur gerakan kursor dan perilaku penghapusan
- Karakter prefiks, gaya prefiks, gaya karakter di bawah kursor, dan gaya karakter lainnya dapat ditentukan
- Mode input menggunakan
- Pengaturan tampilan JSON mencakup indentasi, gaya tanda kurung, gaya key dan value, atribut baris terpilih, serta cara menangani lebar yang berlebih
- Pada input stream, jumlah maksimum objek JSON yang diproses dapat dibatasi dengan
max_streams - Nilai ini adalah pengaturan untuk mengurangi penggunaan memori saat menangani stream data besar; jika tidak ditentukan, tidak ada batasan
- Pada input stream, jumlah maksimum objek JSON yang diproses dapat dibatasi dengan
- Pengaturan autocomplete menyesuaikan ukuran chunk untuk hasil pencarian dan pemuatan latar belakang
- Semakin besar nilainya, tampilan hasil atau penyelesaian pemuatan dapat menjadi lebih cepat, tetapi dapat menggunakan lebih banyak memori
- Key binding dapat dikonfigurasi untuk keluar, menyalin query, menyalin hasil, pergantian mode, operasi editor, dan operasi viewer JSON
- Pengaturan responsivitas UI menyesuaikan jeda pemrosesan input, jeda redraw setelah perubahan ukuran jendela, dan interval animasi spinner
1 komentar
Komentar Hacker News
Keren. Sedikit kekurangannya: bahkan untuk JSON berukuran sedang (16MB) pun sangat lambat, dan warna font terlalu gelap (saya sudah mengirim PR)
Saat mencari alternatif yang performanya bagus, saya melihat fx(https://fx.wtf); tidak punya fitur jq, tetapi merupakan viewer JSON yang cepat
Terlihat keren. Hal yang selalu membuat saya frustrasi di jq adalah kita tidak bisa melihat data apa yang akan diambil sampai menjalankannya
https://github.com/TomConlin/json_to_paths
Sangat menantikannya. Pasti akan saya coba
Sejauh ini saya memakai jq bersama up [0] untuk kueri interaktif, tetapi pengalaman pengguna up kurang saya sukai. Terutama terasa tidak nyaman untuk kueri panjang atau data non-ASCII, jadi saya ingin mencari alternatif
[0]: https://github.com/akavel/up
Benar-benar bagus. Begitu mendapatkan laptop, saya akan langsung menginstalnya
Dulu saya pernah membuat sesuatu yang mirip, jadi tulisan ini langsung menarik perhatian saya
https://github.com/bigH/interactively.git
Saya berpikir apakah ide ini bisa digeneralisasi lebih jauh untuk menambahkan antarmuka interaktif ke lebih banyak perintah di CLI. Sejak lama saya membayangkan semacam “command builder” yang memuat dokumentasi yang sesuai berdasarkan posisi kursor dan menampilkannya saat kita mengedit command line
Sangat keren. Entah ini permintaan yang terlalu besar atau tidak, tetapi saya penasaran apakah bisa diadaptasi agar juga bekerja dengan OjG yang memakai JSONPath alih-alih sintaks jq. Kalau tidak keberatan, saya dengan senang hati ingin membantu
Terlihat bagus. Tampaknya cukup dekat dengan jless(https://github.com/PaulJuliusMartinez/jless)
Akan bagus kalau semua orang juga tahu alternatif bernama fx
Ia bisa melakukan jauh lebih banyak hal seperti
map,filter,reduce, dan semantiknya juga lebih dekat dengan hal-hal yang sudah familier. YAML juga didukunghttps://fx.wtf/getting-started
Saat mencari alat untuk memfilter dan melihat file log JSONL secara dinamis, saya akhirnya memakai VisiData
Jika Anda menangani JSONL (JSON Lines), sangat saya rekomendasikan
Saya sempat berpikir ini mungkin bisa dilakukan hanya dengan fzf
[0]: https://dev.to/pbnj/fzf-jq-interactive-jq-15no
Demo: https://asciinema.org/a/349330
Jika memakai Sublime Text, ada juga plugin yang bisa melakukan hal yang sama [0]
Sebagai catatan, plugin ini dulu saya yang membuatnya
[0]: https://packagecontrol.io/packages/Jq