3 puan yazan GN⁺ 2024-03-20 | 1 yorum | WhatsApp'ta paylaş
  • jnv, JSON’da gezinmek için geliştirilmiş bir araçtır; etkileşimli bir JSON görüntüleyici ile jq filtre düzenleyicisini birlikte sunar
  • Filtre uygulamak için jaq kullandığından kullanıcının ayrıca jq hazırlamasına gerek yoktur
  • Girdi olarak dosya ve stdin desteklenir; tek bir JSON’un yanı sıra StreamDeserializer ile 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 jq filtre düzenleyicisi sunar
  • JSON’a söz dizimi renklendirmesi uygulanabilir
  • jq filtresi uygulamak için jaq kullanır
    • Kullanıcının kendi başına jq hazırlamasına gerek yoktur
  • 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
  • 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 jnv
    • cat data.json | pixi exec jnv
    • conda 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 | jnv
    • jnv data.json
  • UNIX ortamında çıkışta mevcut sonuç stdout’a yazılabilir
    • cat data.json | jnv --write-to-stdout | some-command
    • cat 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
  • Başlıca seçenekler şunlardır
    • -c, --config <CONFIG_FILE>: Ayar dosyası yolunu belirtir
    • --default-filter <DEFAULT_FILTER>: Girdi verisine uygulanacak varsayılan jq filtresini 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: jq filtresini panoya kopyala
    • Ctrl + O: JSON’u panoya kopyala
    • Shift + ↑, Shift + ↓: Başka moda geç
  • Editor mode varsayılan moddur
    • Tab: Öneriyi gir
    • , : İmleci sola/sağa hareket ettir
    • Ctrl + A, Ctrl + E: Satır başına ve sonuna git
    • Backspace: İmlecin önündeki karakteri sil
    • Ctrl + U: Tüm satırı sil
    • Alt + B, Alt + F: ., |, (, ), [, ] karakterlerinden en yakınına göre önceki veya sonraki konuma git
    • Ctrl + W, Alt + D: Aynı karakter kümesini temel alarak önceki veya sonraki konuma kadar sil
  • Otomatik tamamlama önerisi durumunda Tab veya 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ğı git
    • Ctrl + H: Son öğeye git
    • Ctrl + L: İlk öğeye git
    • Enter: Katlamayı aç/kapat
    • Ctrl + P: Tümünü genişlet
    • Ctrl + 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 -c veya --config yolu, 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
  • Ayar dosyası yoksa ilk çalıştırmada otomatik oluşturulur
  • v0.7.0’da default.toml gibi 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_hint ile ayarlanabilir
  • Düzenleyici ayarları odaklı ve odaksız durumlar için ayrı ayrı ayarlanabilir
    • Girdi modu olarak Insert ve Overwrite kullanı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
  • 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_streams ile 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
  • 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

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

    • Eğer “16MB JSON bile çok yavaş” deniyorsa, aqny buraya eğlencesine gelip kendine iş çıkarmış gibi görünüyor. Performans sorunlarıyla uğraşmak en eğlenceli kısım
    • İşte 50MB+ JSON dosyalarıyla çalışmam gerekiyor; jnv bunu kaldırabilse gerçekten harika olur
  • Güzel görünüyor. jq'da beni hep zorlayan şey, çalıştırmadan önce hangi veriyi elde edeceğimi görememekti

  • 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

    • Ama jless sonuçları jq sorgusu olarak kopyalamıyor gibi görünüyor
  • Alternatif olarak herkesin fx'i de bilmesinde fayda var
    map, filter, reduce gibi şeylerde çok daha fazlasını yapabiliyor ve anlambilimi de zaten aşina olunan şeylere daha yakın. YAML da destekliyor
    https://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

  • 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