- jnv es una herramienta creada para explorar JSON que ofrece un visor JSON interactivo junto con un editor de filtros
jq - Para aplicar filtros usa jaq, por lo que el usuario no necesita preparar
jqpor separado - La entrada admite archivos y stdin, y puede procesar no solo un único JSON, sino también múltiples estructuras JSON como JSON Lines que puedan deserializarse con
StreamDeserializer - Mediante configuración TOML se pueden ajustar la visualización de hints, la capacidad de respuesta de la UI, el comportamiento del editor, el estilo del visor JSON, la visualización y el comportamiento del autocompletado, y los atajos de teclado
- El autocompletado solo admite las funciones de
jqIdentity, Object Identifier-Index y Array Index; en v0.7.0 cambió la sintaxis de configuración TOML, pero no se ofrece una herramienta de migración
Funciones que ofrece jnv
- jnv es una herramienta interactiva para explorar JSON, que ofrece un visor JSON y un editor de filtros
jq - Puede aplicar resaltado de sintaxis a JSON
- Para aplicar filtros
jqusa jaq- El usuario no necesita preparar
jqpor su cuenta
- El usuario no necesita preparar
- Está inspirada en jid y jiq
Formatos de entrada y edición de filtros
- La entrada puede recibirse desde un archivo o desde stdin
- Los datos pueden ser un único JSON o múltiples estructuras JSON
- Las múltiples estructuras JSON deben estar en un formato que pueda deserializarse con StreamDeserializer
- Un ejemplo incluido es JSON Lines
- El autocompletado de filtros tiene soporte limitado
- Se pueden mostrar mensajes de hint para ayudar a evaluar filtros
Instalación
- Se puede instalar con Homebrew
brew install jnv- O bien
brew install ynqa/tap/jnv
- Se puede instalar con MacPorts
sudo port install jnv
- Se puede usar en Nix / NixOS
nix-shell -p jnv
- Se puede instalar o ejecutar mediante conda-forge
pixi global install jnvcat data.json | pixi exec jnvconda install jnv
- Docker ofrece un ejemplo para compilar y ejecutar la imagen directamente
- Se indica que la imagen estará disponible en algún registro en un futuro cercano
- Se puede instalar con Cargo
cargo install jnv
Ejemplos de uso y opciones de CLI
- Se puede ejecutar con un archivo o con entrada estándar
cat data.json | jnvjnv data.json
- En entornos UNIX, al salir se puede escribir el resultado actual en stdout
cat data.json | jnv --write-to-stdout | some-commandcat data.json | jnv -- --write-to-stdout > result.json
- El formato básico de uso es
jnv [OPTIONS] [INPUT] [INPUT]es una ruta opcional a un archivo JSON- Si no se especifica o se indica
-, lee desde la entrada estándar
- Si no se especifica o se indica
- Las principales opciones son las siguientes
-c,--config <CONFIG_FILE>: especifica la ruta del archivo de configuración--default-filter <DEFAULT_FILTER>: especifica el filtrojqpredeterminado que se aplicará a los datos de entrada--write-to-stdout: al salir, imprime el resultado JSON actual en stdout-h,--help: muestra la ayuda-V,--version: muestra la versión
Controles de teclado
- Los atajos comunes proporcionan acciones básicas en todo el editor y el visor JSON
Ctrl + C: salirCtrl + Q: copiar el filtrojqal portapapelesCtrl + O: copiar el JSON al portapapelesShift + ↑,Shift + ↓: cambiar a otro modo
- Editor mode es el modo predeterminado
Tab: ingresar una sugerencia←,→: mover el cursor a la izquierda o derechaCtrl + A,Ctrl + E: moverse al inicio y al final de la líneaBackspace: borrar el carácter anterior al cursorCtrl + U: borrar toda la líneaAlt + B,Alt + F: moverse a la posición anterior o siguiente tomando como referencia el carácter cercano entre.,|,(,),[,]Ctrl + W,Alt + D: borrar hasta la posición anterior o siguiente tomando como referencia el mismo conjunto de caracteres
- En estado de sugerencias de autocompletado,
Tabo↓selecciona la siguiente sugerencia, y↑selecciona la anterior - JSON viewer mode ofrece navegación por JSON y control de plegado
↑,Ctrl + K: moverse hacia arriba↓,Ctrl + J: moverse hacia abajoCtrl + H: moverse al último elementoCtrl + L: moverse al primer elementoEnter: alternar plegadoCtrl + P: desplegar todoCtrl + N: plegar todo
Configuración TOML
- jnv permite personalizar varias funciones mediante un archivo de configuración TOML
- La prioridad de carga del archivo de configuración es primero la ruta especificada en la línea de comandos con
-co--config, y luego la ruta predeterminada del archivo de configuración - La ubicación predeterminada del archivo de configuración varía según la plataforma
- Linux:
~/.config/jnv/config.toml - macOS:
~/Library/Application Support/jnv/config.toml - Windows:
C:\Users\{Username}\AppData\Roaming\jnv\config.toml
- Linux:
- Si no existe un archivo de configuración, se crea automáticamente en la primera ejecución
- En v0.7.0 cambió la sintaxis de configuración TOML, como en
default.toml, y los ejemplos reflejan el nuevo formato- No se ofrece una herramienta de migración para este cambio
- El
config.tomllocal debe reemplazarse o actualizarse manualmente para ajustarse a la nueva sintaxis
- Según el tipo de terminal y el entorno, es posible que los caracteres y estilos no se muestren correctamente
- Algunos atajos de teclado y caracteres decorativos podrían no mostrarse o no funcionar en ciertos emuladores de terminal
Opciones de configuración ajustables
- Se puede definir con
no_hintsi se ocultan o no los mensajes de hint - La configuración del editor puede ajustarse separando los estados con foco y sin foco
- Los modos de entrada usan
InsertyOverwrite - Se puede especificar una lista de caracteres de límite de palabra para definir el movimiento del cursor y el comportamiento de borrado
- Se pueden especificar el carácter de prefijo, el estilo del prefijo, el estilo del carácter bajo el cursor y el estilo de los caracteres restantes
- Los modos de entrada usan
- La configuración de visualización de JSON incluye indentación, estilo de llaves y corchetes, estilos de claves y valores, atributos de la fila seleccionada y manejo de desbordamiento de ancho
- En entradas de stream, se puede limitar con
max_streamsla cantidad máxima de objetos JSON a procesar - Este valor sirve para reducir el uso de memoria al manejar streams de datos grandes; si no se especifica, no hay límite
- En entradas de stream, se puede limitar con
- La configuración de autocompletado ajusta el tamaño de los chunks de resultados de búsqueda y carga en segundo plano
- Cuanto mayor sea el valor, más rápido podrían mostrarse los resultados o completarse la carga, pero se podría usar más memoria
- Los atajos de teclado pueden configurarse por acción: salir, copiar consulta, copiar resultado, cambiar de modo, operaciones del editor y operaciones del visor JSON
- La configuración de capacidad de respuesta de la UI ajusta el retraso de procesamiento de entrada, el retraso de redibujado tras cambiar el tamaño de la ventana y el intervalo de animación del spinner
1 comentarios
Opiniones de Hacker News
Genial. Un pequeño punto en contra es que es muy lento incluso con JSON de tamaño mediano (16 MB), y que los colores de la fuente son demasiado oscuros (envié un PR)
Mientras buscaba una alternativa con buen rendimiento, vi fx(https://fx.wtf); no tiene las funciones de jq, pero es un visor JSON rápido
Se ve genial. Algo que siempre me frustró de jq es que no puedes ver qué datos vas a obtener hasta ejecutarlo
https://github.com/TomConlin/json_to_paths
Me genera muchas expectativas. Definitivamente voy a probarlo
Hasta ahora usaba jq junto con up [0] para consultas interactivas, pero la experiencia de usuario de up no me convencía. En particular, era incómodo con consultas largas o datos no ASCII, así que quiero encontrar una alternativa
[0]: https://github.com/akavel/up
Muy bueno. Pienso instalarlo en cuanto agarre mi laptop
Hace tiempo hice algo parecido, así que este post me llamó la atención de inmediato
https://github.com/bigH/interactively.git
Creo que esta idea podría generalizarse más para agregar una interfaz interactiva a más comandos en la CLI. Desde hace mucho imagino un “constructor de comandos” que, según la posición del cursor, cargue la documentación adecuada y la muestre mientras editas la línea de comandos
Muy interesante. No sé si es pedir demasiado, pero me pregunto si se podría adaptar para que funcione también con OjG, que usa JSONPath en vez de la sintaxis de jq. Si les parece bien, con gusto ayudaría
Se ve bien. Parece bastante cercano a jless(https://github.com/PaulJuliusMartinez/jless)
Como alternativa, estaría bueno que todos conozcan fx
Permite hacer mucho más con cosas como
map,filter,reduce, y su semántica se acerca más a algo que ya resulta familiar. También soporta YAMLhttps://fx.wtf/getting-started
Mientras buscaba una herramienta para filtrar y ver dinámicamente archivos de logs JSONL, terminé usando VisiData
Si manejas JSONL (JSON Lines), lo recomiendo mucho
Pensé que esto quizá se podría hacer solo con fzf
[0]: https://dev.to/pbnj/fzf-jq-interactive-jq-15no
Demo: https://asciinema.org/a/349330
Si usas Sublime Text, también hay un plugin que permite hacer lo mismo [0]
De hecho, yo hice ese plugin hace tiempo
[0]: https://packagecontrol.io/packages/Jq