O JSON define um array, ou vetor, como:
Um array é uma coleção ordenada de valores. Um array começa com
[colchete esquerdo e termina com]colchete direito. Os valores são separados por,vírgula.
Arrays podem conter zero ou mais valores JSON de qualquer tipo. Os elementos de um array não precisam ser todos do mesmo tipo.
Use colchetes para reunir elementos em um array.
[1, 2, 3]
Os elementos de um stream podem ser capturados em um array envolvendo-o em colchetes.
range(5) # => a stream of 5 numbers
[range(5)] # => the array [0, 1, 2, 3, 4]
A função length retorna o número de elementos de um array.
A indexação de arrays começa em zero.
Recupere um elemento de um array com uma expressão entre colchetes:
.[2] obtém o terceiro elemento.
Índices negativos contam de trás para frente a partir do fim do array:
.[-1] obtém o último elemento; .[-2] é o penúltimo.
Uma fatia é uma subsequência do array.
.[10:15] retorna 5 elementos a partir do índice 10; o índice final não é incluído.
Existem algumas funções de conveniência:
first obtém o primeiro elemento.last obtém o último elemento.nth(n) obtém o elemento no índice n.O jq oferece muitas funções que cobrem a funcionalidade de iteração mais comum:
map(expr) retorna um novo array em que o expr é aplicado a cada elemento, um por vez.
[1, 2, 3] | map(. * 10) # => [10, 20, 30]
select(expr) é uma função que aplica o expr a um único valor;
se o resultado da expressão for verdadeiro, o valor é retornado;
se o resultado for falso, nada é retornado: não null, literalmente nada.
Para aplicar isso a um array, combine com map.
[range(10)] | map(select(. % 2 == 0)) # => [0, 2, 4, 6, 8]
Como alternativa, aplique select a um stream e colete os resultados.
[range(10) | select(. % 2 == 0)] # => [0, 2, 4, 6, 8]
any(condition) e all(condition) retornam um valor Boolean indicando se algum ou todos os elementos do array satisfazem a condição.
[1, 2, 3, 4] | any(. > 4) # false
[1, 2, 3, 4] | any(. >= 4) # true
[1, 2, 3, 4] | all(. >= 4) # false
[1, 2, 3, 4] | all(. <= 4) # true
Você é um observador de pássaros dedicado que acompanha quantos pássaros visitaram seu jardim nos últimos sete dias.
Você tem cinco tarefas, todas sobre os números de pássaros que visitaram seu jardim.
Você armazena as contagens de pássaros no formato JSON. Um array "principal" armazena arrays de contagens semanais. Cada contagem semanal é um array de sete números inteiros, um número para cada dia da semana. Você sempre adiciona novas semanas no final do array principal. Implemente o filtro que retorna as contagens da semana passada.
$ cat bird-counting-data.json
[
...,
[0, 2, 5, 3, 7, 8, 4],
[4, 5, 9, 10, 9, 4, 3]
]
$ jq -f bird-count.jq < bird-counting-data.json
{
"last_week": [0, 2, 5, 3, 7, 8, 4],
...
Implemente o filtro para retornar quantos pássaros visitaram seu jardim ontem. As contagens de pássaros estão ordenadas por dia, sendo o primeiro elemento a contagem do dia mais antigo e o último elemento a contagem de hoje.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"yesterday": 4,
...
Implemente o filtro para retornar o número total de pássaros que visitaram seu jardim esta semana.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"total": 44,
...
Alguns dias são mais movimentados que outros. Um dia movimentado é aquele em que cinco ou mais pássaros visitaram seu jardim. Implemente o filtro para retornar o número de dias movimentados desta semana.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"busy_days": 4,
...
Implemente o filtro que retorna true se houve algum dia nesta semana em que zero pássaros visitaram o jardim; caso contrário, retorne false.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"has_day_without_birds": false
}
Crie sua conta no Exercism para aprender e dominar jq com 12 conceitos75 exercícios e mentoria humana de verdade, tudo de graça.