Meu nome é Elton Minetto

Processando JSON com o comando jq

Nos últimos anos JSON tornou-se o “esperanto” da Internet, sendo o padrão para a comunicação de APIs e serviços. Por isso processar JSON é algo que os desenvolvedores fazem diariamente e qualquer ferramenta que facilite esse processo é sempre bem-vinda. Uma destas ferramentas é o jq, que vou apresentar neste post.

O jq é uma ferramenta de linha de comando e que pode ser instalada nos principais sistemas operacionais. Como estou usando MacOS instalei usando o comando:

brew install jq

No site oficial é possível ver a documentação para instalação em outros ambientes. Com o jq instalado podemos fazer nossos primeiros testes. Para isso vamos usar o seguinte arquivo JSON:

https://gist.github.com/eminetto/0960739bab52ed4d50d8c6262ec43893

Podemos usar o jq para formatar o arquivo e mostrá-lo colorido em nosso terminal:

cat cr.json| jq

Mas o jq vai além disso. Podemos fazer consultas no arquivo, como por exemplo trazer apenas a informação que desejamos:

cat cr.json| jq .reports[].maintainability

Ele fez uma pesquisa no conteúdo e trouxe apenas os valores encontrados:

124.63257712933509
128.03015432120054

Podemos também fazer operações sobre estes conteúdos. Por exemplo, vamos somar os dois valores:

cat cr.json| jq '[.reports[].maintainability] | add'

A primeira alteração foi incluir os caracteres [ e ] ao redor da nossa pesquisa, transformando o seu conteúdo em um array. Isso é necessário pois o comando add, nativo do jq, faz a soma de valores dentro de um array. O resultado foi:

252.66273145053563

Podemos expandir um pouco mais nosso exemplo calculando a média dos valores:

cat cr.json| jq '[.reports[].maintainability] | add / length'

Este é somente um exemplo simples mas que economizou várias linhas de programação de um projeto que estou trabalhando. Outro exemplo um pouco mais complexo:

cat codeclimate.json | jq -c '[.[] | select(.check_name | contains("Complexity") | not)]' | jq 'map(.remediation_points) | add'

Não vou entrar em detalhes neste exemplo para não alongar demais o post, mas a própria documentação do jq ajuda bastante:

man jq

O jq rapidamente tornou-se uma das minhas ferramentas favoritas e espero que ajude mais desenvolvedores.