JSON define un array como:
Un array es una colección ordenada de valores. Un array empieza con
[corchete izquierdo y termina con]corchete derecho. Los valores se separan con,coma.
Los arrays pueden contener cero o más valores JSON de cualquier tipo. Los elementos de un array no tienen por qué ser todos del mismo tipo.
Usa corchetes para reunir elementos en un array.
[1, 2, 3]
Los elementos de un stream se pueden capturar en un array encerrándolo entre corchetes.
range(5) # => a stream of 5 numbers
[range(5)] # => the array [0, 1, 2, 3, 4]
La función length devuelve el número de elementos de un array.
La indexación de los arrays empieza en cero.
Para obtener un elemento de un array, usa una expresión entre corchetes:
.[2] obtiene el tercer elemento.
Los índices negativos cuentan hacia atrás desde el final del array:
.[-1] obtiene el último elemento; .[-2] es el penúltimo.
Un segmento es una subsecuencia del array.
.[10:15] devuelve 5 elementos a partir del índice 10; el índice final no se incluye.
Hay algunas funciones de utilidad:
first obtiene el primer elemento.last obtiene el último elemento.nth(n) obtiene el elemento en el índice n.jq proporciona muchas funciones que cubren la funcionalidad de iteración más habitual:
map(expr) devuelve un nuevo array donde la expr se aplica a cada elemento por turno.
[1, 2, 3] | map(. * 10) # => [10, 20, 30]
select(expr) es una función que aplica la expr a un único valor;
si el resultado de la expresión es verdadero, se devuelve el valor;
si el resultado es falso, no se devuelve nada: ni null, literalmente nada.
Para aplicarlo a un array, combínalo con map.
[range(10)] | map(select(. % 2 == 0)) # => [0, 2, 4, 6, 8]
Como alternativa, aplica select a un stream y recoge los resultados.
[range(10) | select(. % 2 == 0)] # => [0, 2, 4, 6, 8]
any(condition) y all(condition) devuelven un valor booleano que indica si alguno o todos los elementos del array cumplen la condición.
[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
Eres un ávido observador de aves que lleva un registro de cuántos pájaros han visitado tu jardín en los últimos siete días.
Tienes cinco tareas, todas ellas relacionadas con las cantidades de pájaros que visitaron tu jardín.
Almacenas tus recuentos de pájaros en formato JSON. Un array «principal» almacena arrays de recuentos semanales. Cada recuento semanal es un array de siete números enteros, un número por cada día de la semana. Siempre añades las nuevas semanas al final del array principal. Implementa el filtro que devuelve los recuentos de la semana pasada.
$ 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],
...
Implementa el filtro para devolver cuántos pájaros visitaron tu jardín ayer. Los recuentos de pájaros están ordenados por día: el primer elemento es el recuento del día más antiguo y el último es el recuento de hoy.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"yesterday": 4,
...
Implementa el filtro para devolver el número total de pájaros que han visitado tu jardín esta semana.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"total": 44,
...
Algunos días están más ajetreados que otros. Un día ajetreado es aquel en el que cinco o más pájaros han visitado tu jardín. Implementa el filtro para devolver el número de días ajetreados de esta semana.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"busy_days": 4,
...
Implementa el filtro que devuelve true si hubo algún día esta semana en el que cero pájaros visitaron el jardín; de lo contrario, devuelve false.
$ jq -f bird-count.jq < bird-counting-data.json
{
...
"has_day_without_birds": false
}
Regístrate en Exercism para aprender y dominar jq con 12 conceptos75 ejercicios y mentoría humana real, todo gratis.