- jnv est un outil conçu pour explorer du JSON, qui combine un visualiseur JSON interactif et un éditeur de filtres
jq - Il utilise jaq pour appliquer les filtres, donc l’utilisateur n’a pas besoin d’installer
jqséparément - L’entrée peut provenir d’un fichier ou de stdin, et l’outil peut traiter non seulement un JSON unique mais aussi plusieurs structures JSON comme les JSON Lines pouvant être désérialisées avec
StreamDeserializer - La configuration TOML permet d’ajuster l’affichage des indications, la réactivité de l’interface, le comportement de l’éditeur, le style du visualiseur JSON, l’affichage et le comportement de l’autocomplétion, ainsi que les raccourcis clavier
- L’autocomplétion ne prend en charge que certaines fonctionnalités de
jq: Identity, Object Identifier-Index et Array Index ; la syntaxe de configuration TOML a changé en v0.7.0, mais aucun outil de migration n’est fourni
Fonctionnalités proposées par jnv
- jnv est un outil interactif pour explorer du JSON, avec un visualiseur JSON et un éditeur de filtres
jq - Le JSON peut bénéficier de la coloration syntaxique
- L’application des filtres
jqrepose sur jaq- L’utilisateur n’a pas besoin de préparer
jqlui-même
- L’utilisateur n’a pas besoin de préparer
- Inspiré de jid et jiq
Formats d’entrée et édition des filtres
- L’entrée peut être lue depuis un fichier ou depuis stdin
- Les données peuvent être un JSON unique ou plusieurs structures JSON
- Les structures JSON multiples doivent être dans un format désérialisable via StreamDeserializer
- Cela inclut par exemple les JSON Lines
- L’autocomplétion des filtres est prise en charge de façon limitée
- Des messages d’aide peuvent être affichés pour faciliter l’évaluation des filtres
Méthodes d’installation
- Installation possible avec Homebrew
brew install jnv- ou
brew install ynqa/tap/jnv
- Installation possible avec MacPorts
sudo port install jnv
- Disponible sur Nix / NixOS
nix-shell -p jnv
- Installation ou exécution possible via conda-forge
pixi global install jnvcat data.json | pixi exec jnvconda install jnv
- Docker fournit un exemple pour construire puis exécuter l’image directement
- Il est indiqué que l’image devrait être disponible prochainement dans un registre
- Installation possible avec Cargo
cargo install jnv
Exemples d’utilisation et options CLI
- Exécution possible à partir d’un fichier ou de l’entrée standard
cat data.json | jnvjnv data.json
- En environnement UNIX, il est possible d’écrire le résultat courant vers stdout à la fermeture
cat data.json | jnv --write-to-stdout | some-commandcat data.json | jnv -- --write-to-stdout > result.json
- La forme d’utilisation par défaut est
jnv [OPTIONS] [INPUT] [INPUT]correspond à un chemin de fichier JSON optionnel- S’il n’est pas spécifié, ou si
-est indiqué, la lecture se fait depuis l’entrée standard
- S’il n’est pas spécifié, ou si
- Principales options
-c,--config <CONFIG_FILE>: spécifie le chemin du fichier de configuration--default-filter <DEFAULT_FILTER>: spécifie le filtrejqpar défaut à appliquer aux données d’entrée--write-to-stdout: écrit le résultat JSON courant sur stdout à la fermeture-h,--help: affiche l’aide-V,--version: affiche la version
Raccourcis clavier
- Les raccourcis communs fournissent le comportement de base dans l’éditeur et le visualiseur JSON
Ctrl + C: quitterCtrl + Q: copier le filtrejqdans le presse-papiersCtrl + O: copier le JSON dans le presse-papiersShift + ↑,Shift + ↓: basculer vers un autre mode
- Le mode Editor est le mode par défaut
Tab: insérer une suggestion←,→: déplacer le curseur à gauche ou à droiteCtrl + A,Ctrl + E: aller au début ou à la fin de la ligneBackspace: supprimer le caractère avant le curseurCtrl + U: supprimer toute la ligneAlt + B,Alt + F: se déplacer à la position précédente ou suivante en se basant sur le caractère le plus proche parmi.,|,(,),[,]Ctrl + W,Alt + D: supprimer jusqu’à la position précédente ou suivante selon le même ensemble de caractères
- Lorsqu’une suggestion d’autocomplétion est active,
Tabou↓sélectionne la suggestion suivante, et↑sélectionne la précédente - Le mode JSON viewer permet de parcourir le JSON et de contrôler le repliage
↑,Ctrl + K: monter↓,Ctrl + J: descendreCtrl + H: aller au dernier élémentCtrl + L: aller au premier élémentEnter: activer/désactiver le repliageCtrl + P: tout déplierCtrl + N: tout replier
Configuration TOML
- jnv permet de personnaliser de nombreuses fonctionnalités via un fichier de configuration TOML
- L’ordre de priorité pour le chargement du fichier de configuration est le suivant : d’abord le chemin indiqué en ligne de commande avec
-cou--config, puis le chemin par défaut - L’emplacement du fichier de configuration par défaut varie selon la plateforme
- Linux :
~/.config/jnv/config.toml - macOS :
~/Library/Application Support/jnv/config.toml - Windows :
C:\Users\{Username}\AppData\Roaming\jnv\config.toml
- Linux :
- Si le fichier de configuration n’existe pas, il est créé automatiquement au premier lancement
- En v0.7.0, la syntaxe de configuration TOML, comme
default.toml, a changé, et les exemples reflètent le nouveau format- Aucun outil de migration n’est fourni pour ce changement
- Le
config.tomllocal doit être remplacé ou mis à jour manuellement pour correspondre à la nouvelle syntaxe
- Selon le terminal et l’environnement, certains caractères et styles peuvent ne pas s’afficher correctement
- Certains raccourcis clavier et caractères décoratifs peuvent ne pas s’afficher ou ne pas fonctionner dans certains émulateurs de terminal
Paramètres configurables
- Il est possible de définir
no_hintpour masquer les messages d’aide - Les paramètres de l’éditeur peuvent être ajustés séparément selon qu’il a le focus ou non
- Les modes de saisie utilisés sont
InsertetOverwrite - Une liste de caractères de délimitation de mots peut être définie pour contrôler les déplacements du curseur et les suppressions
- Il est possible de définir le caractère de préfixe, le style du préfixe, le style du caractère sous le curseur et le style des autres caractères
- Les modes de saisie utilisés sont
- Les paramètres d’affichage JSON incluent l’indentation, le style des accolades, le style des clés et des valeurs, les attributs de la ligne sélectionnée, ainsi que la gestion du dépassement de largeur
- Pour les entrées en flux,
max_streamspermet de limiter le nombre maximal d’objets JSON à traiter - Ce paramètre sert à réduire l’usage mémoire lors du traitement de gros flux de données et, s’il n’est pas défini, aucune limite n’est appliquée
- Pour les entrées en flux,
- Les paramètres d’autocomplétion permettent d’ajuster la taille des blocs pour les résultats de recherche et le chargement en arrière-plan
- Plus la valeur est grande, plus l’affichage des résultats ou la fin du chargement peuvent être rapides, mais avec une consommation mémoire plus élevée
- Les raccourcis clavier sont configurables pour quitter, copier la requête, copier le résultat, changer de mode, manipuler l’éditeur et manipuler le visualiseur JSON
- Les paramètres de réactivité de l’interface permettent d’ajuster le délai de traitement des entrées, le délai de redessin après redimensionnement de la fenêtre et l’intervalle d’animation du spinner
1 commentaires
Commentaires sur Hacker News
Super. Un petit bémol : c’est très lent même avec un JSON de taille moyenne (16 Mo), et les couleurs de police sont trop sombres (PR envoyé)
En cherchant une alternative performante, je suis tombé sur fx (https://fx.wtf) : il n’a pas les fonctionnalités de jq, mais c’est un visualiseur JSON rapide
Ça a l’air super. Ce qui m’a toujours frustré avec jq, c’est qu’on ne peut pas voir quelles données on va récupérer avant de l’exécuter
https://github.com/TomConlin/json_to_paths
Très prometteur. Je vais absolument l’essayer
Jusqu’ici, j’utilisais jq avec up [0] pour les requêtes interactives, mais l’expérience utilisateur de up ne me plaisait pas vraiment. C’était particulièrement pénible avec les longues requêtes ou les données non ASCII, donc j’aimerais trouver une alternative
[0]: https://github.com/akavel/up
Vraiment bien. Je compte l’installer dès que je remets la main sur mon ordinateur portable
J’avais déjà créé quelque chose de similaire, donc ce post m’a tout de suite attiré
https://github.com/bigH/interactively.git
Je me demande si on ne pourrait pas généraliser davantage cette idée pour ajouter une interface interactive à plus de commandes en CLI. Depuis longtemps, j’imagine un « générateur de commandes » qui ferait apparaître la documentation pertinente selon la position du curseur, et l’afficherait pendant qu’on édite la ligne de commande
Très chouette. Je ne sais pas si c’est trop demander, mais je me demande s’il serait possible de l’adapter pour qu’il fonctionne aussi avec OjG, qui utilise JSONPath au lieu de la syntaxe jq. Si cela convient, je serais ravi d’aider
Ça a l’air bien. Ça semble assez proche de jless (https://github.com/PaulJuliusMartinez/jless)
Ce serait bien que tout le monde connaisse aussi fx comme alternative
On peut en faire beaucoup plus avec des choses comme
map,filter,reduce, et sa sémantique est plus proche de ce qu’on connaît déjà. Il prend aussi en charge YAMLhttps://fx.wtf/getting-started
En cherchant un outil pour filtrer et afficher dynamiquement des fichiers de logs JSONL, j’ai fini par utiliser VisiData
Si vous manipulez du JSONL (JSON Lines), je le recommande vivement
Je me demandais si ce ne serait pas possible avec seulement fzf
[0]: https://dev.to/pbnj/fzf-jq-interactive-jq-15no
Démo : https://asciinema.org/a/349330
Si vous utilisez Sublime Text, il existe aussi un plugin qui permet de faire la même chose [0]
Pour info, c’est moi qui ai créé ce plugin il y a quelque temps
[0]: https://packagecontrol.io/packages/Jq