Show HN: jnv: filtro JSON interativo com jq
(github.com/ynqa)- jnv é uma ferramenta criada para explorar JSON, oferecendo juntos um visualizador JSON interativo e um editor de filtros
jq - A aplicação dos filtros usa jaq, então o usuário não precisa preparar o
jqseparadamente - A entrada aceita arquivos e stdin, e pode processar não só um JSON único, mas também várias estruturas JSON, como JSON Lines, desde que possam ser desserializadas com
StreamDeserializer - Com configuração em TOML, é possível ajustar a exibição de dicas, a responsividade da UI, o comportamento do editor, o estilo do visualizador JSON, a exibição e o comportamento do autocompletar e os atalhos de teclado
- O autocompletar oferece suporte apenas a recursos do
jqcomo Identity, Object Identifier-Index e Array Index, e na v0.7.0 a sintaxe de configuração TOML mudou, mas não foi fornecida nenhuma ferramenta de migração
Recursos oferecidos pelo jnv
- jnv é uma ferramenta interativa para explorar JSON e oferece um visualizador JSON e um editor de filtros
jq - É possível aplicar realce de sintaxe ao JSON
- A aplicação de filtros
jqusa jaq- O usuário não precisa preparar o
jqmanualmente
- O usuário não precisa preparar o
- Inspirado em jid e jiq
Formatos de entrada e edição de filtros
- A entrada pode vir de arquivo ou stdin
- Os dados podem ser um JSON único ou várias estruturas JSON
- As várias estruturas JSON devem estar em um formato que possa ser desserializado por StreamDeserializer
- Um exemplo é JSON Lines
- O autocompletar de filtros tem suporte limitado
- É possível exibir mensagens de dica para ajudar na avaliação dos filtros
Como instalar
- Pode ser instalado com Homebrew
brew install jnv- ou
brew install ynqa/tap/jnv
- Pode ser instalado com MacPorts
sudo port install jnv
- Pode ser usado em Nix / NixOS
nix-shell -p jnv
- Pode ser instalado ou executado pelo caminho do conda-forge
pixi global install jnvcat data.json | pixi exec jnvconda install jnv
- Para Docker, há um exemplo de como compilar e executar a imagem manualmente
- O texto informa que a imagem deverá ser disponibilizada em algum registro em um futuro próximo
- Pode ser instalado com Cargo
cargo install jnv
Exemplos de uso e opções de CLI
- Pode ser executado com arquivo ou entrada padrão
cat data.json | jnvjnv data.json
- Em ambientes UNIX, ao sair é possível escrever o resultado atual no stdout
cat data.json | jnv --write-to-stdout | some-commandcat data.json | jnv -- --write-to-stdout > result.json
- O formato básico de uso é
jnv [OPTIONS] [INPUT] [INPUT]é um caminho opcional para arquivo JSON- Se não for informado, ou se
-for informado, a leitura será feita da entrada padrão
- Se não for informado, ou se
- As principais opções são as seguintes
-c,--config <CONFIG_FILE>: especifica o caminho do arquivo de configuração--default-filter <DEFAULT_FILTER>: especifica o filtrojqpadrão a ser aplicado aos dados de entrada--write-to-stdout: imprime o resultado JSON atual no stdout ao sair-h,--help: exibe a ajuda-V,--version: exibe a versão
Atalhos de teclado
- Os atalhos comuns fornecem o comportamento padrão no editor e no visualizador JSON
Ctrl + C: sairCtrl + Q: copiar o filtrojqpara a área de transferênciaCtrl + O: copiar o JSON para a área de transferênciaShift + ↑,Shift + ↓: alternar para outro modo
- O Editor mode é o modo padrão
Tab: inserir sugestão←,→: mover o cursor para a esquerda ou direitaCtrl + A,Ctrl + E: ir para o início e o fim da linhaBackspace: apagar o caractere antes do cursorCtrl + U: apagar a linha inteiraAlt + B,Alt + F: mover para a posição anterior ou seguinte com base no caractere mais próximo entre.,|,(,),[,]Ctrl + W,Alt + D: apagar até a posição anterior ou seguinte com base no mesmo conjunto de caracteres
- Quando as sugestões de autocompletar estão ativas,
Tabou↓seleciona a próxima sugestão, e↑seleciona a sugestão anterior - O JSON viewer mode oferece navegação no JSON e controle de recolhimento
↑,Ctrl + K: mover para cima↓,Ctrl + J: mover para baixoCtrl + H: ir para o último itemCtrl + L: ir para o primeiro itemEnter: alternar recolhimentoCtrl + P: expandir tudoCtrl + N: recolher tudo
Configuração TOML
- O jnv permite personalizar vários recursos com um arquivo de configuração TOML
- A prioridade de carregamento do arquivo de configuração é primeiro o caminho especificado na linha de comando com
-cou--config, e depois o caminho padrão do arquivo de configuração - A localização padrão do arquivo de configuração varia por plataforma
- Linux:
~/.config/jnv/config.toml - macOS:
~/Library/Application Support/jnv/config.toml - Windows:
C:\Users\{Username}\AppData\Roaming\jnv\config.toml
- Linux:
- Se o arquivo de configuração não existir, ele será criado automaticamente na primeira execução
- Na v0.7.0, a sintaxe de configuração TOML como em
default.tomlmudou, e os exemplos refletem o novo formato- Não foi fornecida nenhuma ferramenta de migração para essa mudança
- O
config.tomllocal deve ser substituído ou atualizado manualmente para o novo formato
- Dependendo do tipo de terminal e do ambiente, alguns caracteres e estilos podem não ser exibidos corretamente
- Alguns atalhos e caracteres decorativos podem não aparecer ou não funcionar em certos emuladores de terminal
Itens de configuração ajustáveis
- É possível definir com
no_hintse as mensagens de dica devem ser ocultadas - As configurações do editor podem ser ajustadas separando estado com foco e sem foco
- Os modos de entrada usam
InserteOverwrite - É possível definir a lista de caracteres de fronteira de palavra para controlar o movimento do cursor e as ações de exclusão
- É possível definir o caractere de prefixo, o estilo do prefixo, o estilo do caractere sob o cursor e o estilo dos demais caracteres
- Os modos de entrada usam
- As configurações de exibição JSON incluem recuo, estilo de colchetes, estilo de chaves e valores, atributos da linha selecionada e forma de tratar largura excedida
- Em entradas em stream, é possível limitar com
max_streamso número máximo de objetos JSON a processar - Esse valor serve para reduzir o uso de memória ao lidar com grandes streams de dados e, se não for definido, não há limite
- Em entradas em stream, é possível limitar com
- As configurações de autocompletar ajustam os resultados de busca e o tamanho dos blocos de carregamento em segundo plano
- Quanto maior o valor, mais rápida pode ser a exibição dos resultados ou a conclusão do carregamento, mas com maior uso de memória
- Os atalhos de teclado podem ser configurados para sair, copiar consulta, copiar resultado, trocar de modo, operar o editor e operar o visualizador JSON
- As configurações de responsividade da UI ajustam o atraso no processamento de entrada, o atraso para redesenhar após redimensionar a janela e o intervalo da animação do spinner
1 comentários
Comentários do Hacker News
Legal. Uma pequena ressalva é que ele é muito lento até com JSON de tamanho médio (16 MB), e as cores da fonte são escuras demais (enviei um PR)
Procurando alternativas com bom desempenho, vi o fx (https://fx.wtf); ele não tem os recursos do jq, mas é um visualizador de JSON rápido
Parece bacana. O que sempre me frustrava no jq era que eu não conseguia ver quais dados eu obteria antes de executar
https://github.com/TomConlin/json_to_paths
Estou bem animado. Com certeza vou conferir
Até agora, eu usava jq junto com up [0] para consultas interativas, mas não gostava muito da experiência de usuário do up. Especialmente com consultas longas ou dados não ASCII, era incômodo, então quero encontrar uma alternativa
[0]: https://github.com/akavel/up
Muito bom. Assim que eu pegar meu notebook, vou instalar
Já fiz algo parecido antes, então este post me chamou a atenção imediatamente
https://github.com/bigH/interactively.git
Fico pensando se não daria para generalizar mais essa ideia e adicionar interfaces interativas a mais comandos na CLI. Há muito tempo imagino um “construtor de comandos” que traga a documentação adequada de acordo com a posição do cursor e a mostre enquanto a linha de comando é editada
Muito legal. Não sei se é pedir demais, mas fico curioso se seria possível adaptá-lo para funcionar também com o OjG, que usa JSONPath em vez da sintaxe do jq. Se for aceitável, eu teria prazer em ajudar
Parece bom. Parece bem próximo do jless (https://github.com/PaulJuliusMartinez/jless)
Como alternativa, seria bom que todos conhecessem também o fx
Dá para fazer muito mais coisas como
map,filter,reduce, e a semântica também é mais próxima do que já é familiar. Também oferece suporte a YAMLhttps://fx.wtf/getting-started
Enquanto procurava uma ferramenta para filtrar e visualizar dinamicamente arquivos de log JSONL, acabei usando o VisiData
Se você trabalha com JSONL (JSON Lines), recomendo muito
Pensei que talvez isso fosse possível só com fzf
[0]: https://dev.to/pbnj/fzf-jq-interactive-jq-15no
Demo: https://asciinema.org/a/349330
Se você usa Sublime Text, também há um plugin que faz a mesma coisa [0]
Aliás, eu fiz esse plugin há algum tempo
[0]: https://packagecontrol.io/packages/Jq