3 poin oleh GN⁺ 2024-03-20 | 1 komentar | Bagikan ke WhatsApp
  • 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 jq secara 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 jq Identity, 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 jq sendiri
  • 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
  • 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 jnv
    • cat data.json | pixi exec jnv
    • conda 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 | jnv
    • jnv data.json
  • Di lingkungan UNIX, hasil saat ini dapat ditulis ke stdout saat keluar
    • cat data.json | jnv --write-to-stdout | some-command
    • cat 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
  • Opsi utama adalah sebagai berikut
    • -c, --config <CONFIG_FILE>: menentukan path file konfigurasi
    • --default-filter <DEFAULT_FILTER>: menentukan filter jq default 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: keluar
    • Ctrl + Q: menyalin filter jq ke clipboard
    • Ctrl + O: menyalin JSON ke clipboard
    • Shift + ↑, Shift + ↓: beralih ke mode lain
  • Editor mode adalah mode default
    • Tab: memasukkan saran
    • , : menggerakkan kursor ke kiri/kanan
    • Ctrl + A, Ctrl + E: berpindah ke awal dan akhir baris
    • Backspace: menghapus karakter sebelum kursor
    • Ctrl + U: menghapus seluruh baris
    • Alt + 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 Tab atau , dan pilih saran sebelumnya dengan
  • JSON viewer mode menyediakan navigasi JSON dan kontrol collapse/expand
    • , Ctrl + K: bergerak ke atas
    • , Ctrl + J: bergerak ke bawah
    • Ctrl + H: berpindah ke item terakhir
    • Ctrl + L: berpindah ke item pertama
    • Enter: toggle collapse/expand
    • Ctrl + P: expand semua
    • Ctrl + N: collapse semua

Konfigurasi TOML

  • jnv menyesuaikan berbagai fitur melalui file konfigurasi TOML
  • Prioritas pemuatan file konfigurasi dimulai dari path -c atau --config yang 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
  • Jika file konfigurasi tidak ada, file akan dibuat otomatis saat pertama kali dijalankan
  • Pada v0.7.0, sintaks konfigurasi TOML seperti default.toml berubah, dan contoh mencerminkan format baru
    • Alat migrasi untuk perubahan ini tidak disediakan
    • config.toml lokal 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 Insert dan Overwrite
    • 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
  • 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
  • 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

 
GN⁺ 2024-03-20
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

    • Kalau benar “JSON 16MB pun sangat lambat”, berarti aqny datang ke sini untuk bersenang-senang lalu malah menemukan pekerjaan yang harus dilakukan. Menangani masalah performa itu yang paling seru
    • Di kantor kami harus menangani file JSON 50MB atau lebih, jadi akan sangat bagus kalau jnv bisa memproses ukuran seperti itu
  • Terlihat keren. Hal yang selalu membuat saya frustrasi di jq adalah kita tidak bisa melihat data apa yang akan diambil sampai menjalankannya

  • 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)

    • Sepertinya jless tidak menyalin hasilnya sebagai kueri jq
  • 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 didukung
    https://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

  • 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