Transformando JSON com jq: um guia interativo
(navendu.me)jqé uma ferramenta de linha de comando para trabalhar com dados JSON e vem instalada por padrão na maioria das distribuições Linux- É útil para exibir dados JSON de forma legível (pretty print) ou transformá-los usando filtros
- É tão poderosa que costuma aparecer entre as 5 ferramentas CLI que todo desenvolvedor deveria aprender, permitindo realizar de forma simples várias tarefas com dados JSON
Instalação do jq e uso básico
-
Como instalar
jqpode ser instalado pela maioria dos gerenciadores de pacotes, além de ser possível baixar o binário diretamente ou compilar a partir do código-fonte- Após a instalação, você pode verificar se está funcionando com o comando
jq
-
Exemplo básico de uso
- Exibir dados JSON de forma legível:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq
- Exibir dados JSON de forma legível:
-
Exemplo de filtro JSON
- Filtrar dados que correspondam a uma condição específica:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy") | {name, username, email}'
- Filtrar dados que correspondam a uma condição específica:
Principais recursos do jq
Filtros básicos
-
Filtro Identity
- Exibe os dados de entrada sem alterações:
echo '{"id":1,"name":"Leanne Graham","website":"hildegard.org"}' | jq '.'
- Exibe os dados de entrada sem alterações:
-
Acesso a campos específicos
- Selecionar um campo específico de um objeto JSON:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name' - Acessar um campo aninhado:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.address.zipcode'
- Selecionar um campo específico de um objeto JSON:
Manipulação de arrays
-
Acesso a elementos do array
- Selecionar o elemento de um índice específico em um array JSON:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[0]'
- Selecionar o elemento de um índice específico em um array JSON:
-
Fatiamento de arrays
- Extrair um subarray de um intervalo específico:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[3:6]'
- Extrair um subarray de um intervalo específico:
-
Iteração sobre arrays
- Aplicar um filtro a cada elemento do array:
curl 'https://jsonplaceholder.typicode.com/users' | jq '.[] | {name, email}'
- Aplicar um filtro a cada elemento do array:
Criação de novo JSON
-
Criar novo objeto
- Criar um novo objeto JSON com os campos selecionados:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq \ '{"name": .name, "email": .email, "company": .company.name}'
- Criar um novo objeto JSON com os campos selecionados:
-
Criar novo array
- Criar um array com os dados transformados:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '[.[] | {name: .name, email: .email, company: .company.name}]'
- Criar um array com os dados transformados:
Recursos avançados do jq
Uso de funções
-
Cálculo de comprimento
- Calcular o comprimento de uma string:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq '.name | length'
- Calcular o comprimento de uma string:
-
Extração de chaves
- Retornar as chaves de um objeto como um array:
curl 'https://jsonplaceholder.typicode.com/users/1' | jq 'keys'
- Retornar as chaves de um objeto como um array:
-
Função
map- Aplicar um filtro a cada elemento do array:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'map({name: .name, city: .address.city})'
- Aplicar um filtro a cada elemento do array:
Seleção de dados
- Selecionar dados por condição
- Filtrar dados que satisfaçam uma condição específica:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ '.[] | select(.address.city == "South Christy")'
- Filtrar dados que satisfaçam uma condição específica:
Transformação e uso de JSON
-
Transformações avançadas de JSON
- Filtros para agrupar dados ou calcular estatísticas:
curl 'https://jsonplaceholder.typicode.com/users' | jq \ 'group_by(.address.city) | map({ city: .[0].address.city, user_count: length, users: [.[] | {name: .name, username: .username}] })'
- Filtros para agrupar dados ou calcular estatísticas:
-
Processamento de JSON em grande escala
- Processar grandes volumes de dados JSON com eficiência:
curl 'https://api.github.com/repos/apache/apisix/contributors?per_page=100' | jq \ 'sort_by(.contributions) | reverse | map({username: .login, contributions}) | .[0:5]'
- Processar grandes volumes de dados JSON com eficiência:
-
É possível praticar no jq Playground
3 comentários
Obrigado pelo resumo! Informação realmente valiosa.
Mas fiquei curioso para saber quais são as outras 4 ferramentas de CLI; como o texto não menciona isso, acabou virando um MacGuffin...
https://navendu.me/posts/jq-interactive-guide/….
Vendo o texto original,
> jq is on every “five command line tools to learn as a developer” video on YouTube.
há essa frase aí.
Os outros quatro não são especificados; parece que ele sempre é citado nesse tipo de vídeo de recomendação de ferramentas de CLI kkk