Show HN: jnv: jq kullanan etkileşimli JSON filtresi
(github.com/ynqa)- jnv, JSON’da gezinmek için geliştirilmiş bir araçtır; etkileşimli bir JSON görüntüleyici ile
jqfiltre düzenleyicisini birlikte sunar - Filtre uygulamak için jaq kullandığından kullanıcının ayrıca
jqhazırlamasına gerek yoktur - Girdi olarak dosya ve stdin desteklenir; tek bir JSON’un yanı sıra
StreamDeserializerile deserialize edilebilen JSON Lines gibi birden fazla JSON yapısını da işleyebilir - TOML ayarlarıyla ipucu gösterimi, UI tepkiselliği, düzenleyici davranışı, JSON görüntüleyici stili, otomatik tamamlama gösterimi ve davranışı ile tuş atamaları ayarlanabilir
- Otomatik tamamlama,
jqözelliklerinden yalnızca Identity, Object Identifier-Index ve Array Index destekler; v0.7.0’da TOML ayar söz dizimi değişmiş olsa da geçiş aracı sağlanmaz
jnv’nin sunduğu özellikler
- jnv, JSON’da gezinmek için etkileşimli bir araçtır; JSON görüntüleyici ve
jqfiltre düzenleyicisi sunar - JSON’a söz dizimi renklendirmesi uygulanabilir
jqfiltresi uygulamak için jaq kullanır- Kullanıcının kendi başına
jqhazırlamasına gerek yoktur
- Kullanıcının kendi başına
- jid ve jiq’den ilham almıştır
Girdi biçimi ve filtre düzenleme
- Girdi dosyadan veya stdin üzerinden alınabilir
- Veri tek bir JSON ya da birden fazla JSON yapısı olabilir
- Birden fazla JSON yapısı, StreamDeserializer ile deserialize edilebilen bir biçimde olmalıdır
- Örnek olarak JSON Lines dahildir
- Filtre otomatik tamamlama sınırlı olarak desteklenir
- Filtre değerlendirmesine yardımcı olan ipucu mesajları gösterilebilir
Kurulum yöntemleri
- Homebrew ile kurulabilir
brew install jnv- veya
brew install ynqa/tap/jnv
- MacPorts ile kurulabilir
sudo port install jnv
- Nix / NixOS üzerinde kullanılabilir
nix-shell -p jnv
- conda-forge üzerinden kurulabilir veya çalıştırılabilir
pixi global install jnvcat data.json | pixi exec jnvconda install jnv
- Docker için imajı doğrudan derleyip çalıştırmaya yönelik bir örnek sunar
- İmajın yakın gelecekte kayıt servislerinden birinde sunulacağı belirtilir
- Cargo ile kurulabilir
cargo install jnv
Kullanım örnekleri ve CLI seçenekleri
- Dosya veya standart girdiyle çalıştırılabilir
cat data.json | jnvjnv data.json
- UNIX ortamında çıkışta mevcut sonuç stdout’a yazılabilir
cat data.json | jnv --write-to-stdout | some-commandcat data.json | jnv -- --write-to-stdout > result.json
- Temel kullanım biçimi
jnv [OPTIONS] [INPUT]şeklindedir [INPUT], isteğe bağlı JSON dosyası yoludur- Belirtilmezse veya
-belirtilirse standart girdiden okur
- Belirtilmezse veya
- Başlıca seçenekler şunlardır
-c,--config <CONFIG_FILE>: Ayar dosyası yolunu belirtir--default-filter <DEFAULT_FILTER>: Girdi verisine uygulanacak varsayılanjqfiltresini belirtir--write-to-stdout: Çıkışta mevcut JSON sonucunu stdout’a yazdırır-h,--help: Yardım bilgisini yazdırır-V,--version: Sürümü yazdırır
Tuş kullanımı
- Ortak tuş atamaları, düzenleyici ve JSON görüntüleyici genelinde temel davranışları sağlar
Ctrl + C: ÇıkışCtrl + Q:jqfiltresini panoya kopyalaCtrl + O: JSON’u panoya kopyalaShift + ↑,Shift + ↓: Başka moda geç
- Editor mode varsayılan moddur
Tab: Öneriyi gir←,→: İmleci sola/sağa hareket ettirCtrl + A,Ctrl + E: Satır başına ve sonuna gitBackspace: İmlecin önündeki karakteri silCtrl + U: Tüm satırı silAlt + B,Alt + F:.,|,(,),[,]karakterlerinden en yakınına göre önceki veya sonraki konuma gitCtrl + W,Alt + D: Aynı karakter kümesini temel alarak önceki veya sonraki konuma kadar sil
- Otomatik tamamlama önerisi durumunda
Tabveya↓ile sonraki öneri,↑ile önceki öneri seçilir - JSON viewer mode, JSON’da gezinme ve katlama denetimi sağlar
↑,Ctrl + K: Yukarı git↓,Ctrl + J: Aşağı gitCtrl + H: Son öğeye gitCtrl + L: İlk öğeye gitEnter: Katlamayı aç/kapatCtrl + P: Tümünü genişletCtrl + N: Tümünü katla
TOML ayarları
- jnv, çeşitli özellikleri özelleştirmek için TOML ayar dosyası kullanır
- Ayar dosyası yükleme önceliğinde önce komut satırında belirtilen
-cveya--configyolu, ardından varsayılan ayar dosyası yolu gelir - Varsayılan ayar dosyası konumu platforma göre değişir
- Linux:
~/.config/jnv/config.toml - macOS:
~/Library/Application Support/jnv/config.toml - Windows:
C:\Users\{Username}\AppData\Roaming\jnv\config.toml
- Linux:
- Ayar dosyası yoksa ilk çalıştırmada otomatik oluşturulur
- v0.7.0’da
default.tomlgibi TOML ayar söz dizimi değişmiştir ve örnekler yeni biçimi yansıtır- Bu değişiklik için geçiş aracı sağlanmaz
- Yerel
config.toml, yeni söz dizimine uygun şekilde elle değiştirilmeli veya güncellenmelidir
- Terminal türüne ve ortama bağlı olarak karakterler ve stiller düzgün görüntülenmeyebilir
- Bazı tuş atamaları ve süsleme karakterleri bazı terminal emülatörlerinde görüntülenmeyebilir veya çalışmayabilir
Ayarlanabilir yapılandırma öğeleri
- İpucu mesajlarının gizlenip gizlenmeyeceği
no_hintile ayarlanabilir - Düzenleyici ayarları odaklı ve odaksız durumlar için ayrı ayrı ayarlanabilir
- Girdi modu olarak
InsertveOverwritekullanılır - İmleç hareketi ve silme davranışını belirlemek için sözcük sınırı karakterleri listesi belirtilebilir
- Önek gösterim karakteri, önek stili, imlecin altındaki karakter stili ve kalan karakterlerin stili belirtilebilir
- Girdi modu olarak
- JSON gösterim ayarları girintileme, parantez stili, anahtar ve değer stilleri, seçili satır özellikleri ve genişlik aşımı işleme biçimini içerir
- Akış girdisinde işlenecek en fazla JSON nesnesi sayısı
max_streamsile sınırlandırılabilir - Bu değer büyük veri akışlarıyla çalışırken bellek kullanımını azaltmaya yönelik bir ayardır; belirtilmezse sınır yoktur
- Akış girdisinde işlenecek en fazla JSON nesnesi sayısı
- Otomatik tamamlama ayarları, arama sonuçları ve arka plan yüklemesinin parça boyutunu ayarlar
- Değer büyüdükçe sonuçların gösterimi veya yüklemenin tamamlanması daha hızlı olabilir, ancak daha fazla bellek kullanabilir
- Tuş atamaları çıkış, sorgu kopyalama, sonuç kopyalama, mod değiştirme, düzenleyici işlemleri ve JSON görüntüleyici işlemleri için ayrı ayrı ayarlanabilir
- UI tepkiselliği ayarları giriş işleme gecikmesini, pencere boyutu değiştikten sonra yeniden çizim gecikmesini ve spinner animasyon aralığını ayarlar
1 yorum
Hacker News yorumları
Harika. Küçük bir eksisi, orta boy JSON'larda (16MB) bile çok yavaş olması ve yazı renginin fazla koyu olması (PR gönderdim)
Daha performanslı bir alternatif ararken fx(https://fx.wtf)'e rastladım; jq özellikleri yok ama hızlı bir JSON görüntüleyicisi
Güzel görünüyor. jq'da beni hep zorlayan şey, çalıştırmadan önce hangi veriyi elde edeceğimi görememekti
https://github.com/TomConlin/json_to_paths
Gerçekten heyecan verici. Kesinlikle bakacağım
Şimdiye kadar etkileşimli sorgular için jq ile up [0] kullanıyordum ama up'ın kullanıcı deneyimini pek sevmiyordum. Özellikle uzun sorgularda veya ASCII dışı verilerde kullanışsız geliyor, bu yüzden bir alternatif istiyorum
[0]: https://github.com/akavel/up
Gerçekten çok iyi. Dizüstü bilgisayarımı elime alır almaz kurmayı düşünüyorum
Geçmişte benzer bir şey yaptığım için bu yazı hemen ilgimi çekti
https://github.com/bigH/interactively.git
Bu fikri daha da genelleyip CLI'de daha fazla komuta etkileşimli arayüzler ekleyebilir miyiz diye merak ediyorum. Uzun zamandır, imleç konumuna göre uygun belgeleri getirip komut satırını düzenlerken gösteren bir “komut oluşturucu” hayal ediyorum
Çok havalı. Fazla büyük bir istek mi bilmiyorum ama jq sözdizimi yerine JSONPath kullanan OjG için de uyarlanıp uyarlanamayacağını merak ediyorum. Uygunsa memnuniyetle yardımcı olurum
İyi görünüyor. jless(https://github.com/PaulJuliusMartinez/jless)'e oldukça benziyor
Alternatif olarak herkesin fx'i de bilmesinde fayda var
map,filter,reducegibi şeylerde çok daha fazlasını yapabiliyor ve anlambilimi de zaten aşina olunan şeylere daha yakın. YAML da destekliyorhttps://fx.wtf/getting-started
JSONL günlük dosyalarını dinamik olarak filtreleyip görüntülemek için bir araç ararken VisiData kullanmaya başladım
JSONL (JSON Lines) ile çalışıyorsanız şiddetle tavsiye ederim
Bunun sadece fzf ile de yapılabileceğini düşünmüştüm
[0]: https://dev.to/pbnj/fzf-jq-interactive-jq-15no
Demo: https://asciinema.org/a/349330
Sublime Text kullanıyorsanız aynı şeyi yapan bir eklenti de var [0]
Bu arada, bu eklentiyi geçmişte ben yapmıştım
[0]: https://packagecontrol.io/packages/Jq