O jq é uma ferramenta de linha de comando que permite fazer queries e transformações em arquivos JSON. Ela é muito interessante e útil quando queremos buscar dados diversos em arquivos muito grandes. Para utilizar ela é muito simples, após instalada você já pode fazer a query. Vamos usar de exemplo este JSON.

A primeira coisa que podemos fazer é utilizar ele apenas para formatar, para isso basta executarmos o comando cat exemplo.json | jq:

Terminal com cat exemplo.json | jq mostrando o JSON formatado e colorido: uma lista de pessoas com campos como name, email, tags e friends O que temos aqui é uma lista de objetos, vamos então listar o nome de todas as pessoas dessa lista cat exemplo.json | jq .[].name:Terminal com o jq extraindo o campo name de cada item: os sete nomes da listaComo podemos ver é muito simples, usamos o . (ponto) para indicar que estamos operando na raiz, os colchetes são para operações em lista, podemos especificar o índice passando algo como [1], ou até inicio e fim com [2:4]. Outra operação que podemos fazer é saber o tamanho de array usando o length cat exemplo.json | jq “length”:Terminal com cat exemplo.json | jq length retornando 7Podemos inclusive criar condicionais utilizando o jq, por exemplo baseado na operação de tamanho que fizemos anteriormente cat exemplo.json | jq ‘if .[].name == “Tanya Villarreal” then “Achou” else “Não Achou” end’:Terminal com um if do jq comparando cada nome com Tanya Villarreal: um Achou seguido de seis Não Achou

Podemos interpolar strings cat exemplo.json | jq ‘“O nome é (.[].name)”’:

Terminal com o jq interpolando strings: uma linha O nome é … para cada uma das sete pessoas

Além dessas possibilidades o jq permite fazer diversas outras operações, como operações matemáticas, pipelines, maps e muito mais. Um lugar para aprender a usa-lo e treinar pode ser o jq play, uma versão online que permite treinar e até usar o jq sem instalar.]

Há também implementações do jq dentro de linguagens, mas pode ser algo não tem performático do que usar as próprias estruturas de dados inerentes a própria linguagem.