jq Playground
Escribe un filtro jq y ve el resultado al instante. Pega tu JSON (o JSON Lines), activa opciones de jq como -r, -c y -s y aprende con una biblioteca de filtros listos para usar. Todo se ejecuta localmente en tu navegador.
Última actualización:
Se ejecuta en vivo mientras escribes. Ctrl+Intro lo ejecuta ya. Se admiten filtros de varias líneas, funciones def y comentarios (#).
Biblioteca de filtros de ejemplo
Cómo usar jq Playground
- Pega tu JSON en el cuadro de entrada, suelta un archivo .json sobre él o usa los datos de ejemplo.
- Escribe un filtro jq como
.users[] | select(.active) | .name. La salida se actualiza mientras escribes. - Activa opciones como
-rpara cadenas sin comillas,-cpara un resultado por línea o-spara reunir JSON Lines en un array. - Explora la biblioteca de ejemplos y haz clic en cualquier tarjeta para cargar un filtro que funciona y que puedes adaptar.
- Copia o descarga la salida, o copia el comando
jqequivalente para ejecutarlo en tu terminal.
Chuleta de jq
| Filtro | Qué hace | Resultado de ejemplo |
|---|---|---|
. | Identidad: toda la entrada | JSON formateado |
.key, .a.b, ."my-key" | Campo del objeto (null si falta) | .name → "Ada" |
.[0], .[-1], .[2:4] | Índice de array, desde el final, porción | [1,2,3] | .[-1] → 3 |
.[], .[]? | Cada elemento / valor (? ignora los errores) | Un resultado por elemento |
a | b | Tubería: pasa cada salida de a a b | .users[] | .name |
a, b | Ambas salidas | .name, .age |
[ ... ], {a, b: .c} | Construir un array o un objeto | {name, city: .address.city} |
select(cond) | Conserva la entrada solo si cond es verdadera | select(.age > 30) |
map(f), map_values(f) | Aplica f a cada elemento | map(.price * 2) |
a // b | Alternativa: b cuando a es null, false o vacío | .email // "none" |
.a = v, .a |= f, .a += 1 | Asignar, actualizar o modificar una ruta | .n |= . + 1 |
del(.a), to_entries, with_entries(f) | Eliminar rutas, trabajar con pares clave/valor | with_entries(.key |= ascii_upcase) |
sort_by(f), group_by(f), unique_by(f) | Ordenar, agrupar o eliminar duplicados por una clave | sort_by(-.age) |
add, length, min_by(f), max_by(f) | Agregar un array | [.[].n] | add |
reduce .[] as $x (init; update) | Reducir muchos valores a uno | reduce .[] as $x (0; . + $x) |
"\(.a) and \(.b)" | Interpolación de cadenas | "Hi \(.name)" |
test(), capture(), sub(), gsub() | Expresiones regulares | gsub("\\s+"; " ") |
@csv, @tsv, @base64, @uri, @html, @sh | Cadenas de formato (úsalas con -r) | [.id, .name] | @csv |
.., paths, getpath(p) | Recorrer cada valor / ruta | [.. | numbers] |
try f catch g, f? | Manejar errores | try tonumber catch 0 |
Opciones de línea de comandos de jq
| Opción | Significado | Uso típico |
|---|---|---|
-r | Salida raw: cadenas sin comillas | Listas de nombres, filas CSV/TSV, scripts de shell |
-c | Salida compacta: un resultado por línea | Generar JSON Lines, logs |
-s | Slurp: lee todas las entradas en un array | Contar o sumar JSON Lines |
-n | Entrada nula: empieza con null | Generar JSON, leer con input/inputs |
-R | Entrada raw: cada línea es una cadena | Analizar CSV o texto plano con jq |
-S | Ordenar las claves de los objetos en la salida | Diffs estables |
-j | Join: salida raw sin saltos de línea | Construir una cadena larga |
--arg name v / --argjson name json | Define $name | Pasar valores del shell a un filtro de forma segura |
Consejos para escribir filtros jq
Construye los filtros paso a paso. Empieza con ., añade una tubería cada vez y observa cómo cambia la salida. Cuando un paso devuelve muchos resultados, envuélvelo en [ ] para verlos como un array.
Los campos que faltan son null, no errores. .missing devuelve null, pero .missing[] o .missing.x sobre un número falla. Usa ?, // default o select() para proteger los datos opcionales.
Pon los filtros entre comillas en el shell. En Linux y macOS envuelve el filtro entre comillas simples: jq -r '.items[] | .name' data.json. El comando que aparece bajo la salida ya está entrecomillado.
Preguntas frecuentes
¿Qué es jq?
jq es un procesador de JSON para la línea de comandos. Un filtro jq describe cómo transformar JSON: elige campos con .name, recorre arrays con .[], filtra con select(), da nueva forma con {} y [] y agrega con funciones como map, group_by, add y reduce. Este playground te permite probar filtros sin instalar nada.
¿Se sube mi JSON a un servidor?
No. El motor de jq se ejecuta completamente en JavaScript dentro de tu navegador (en un worker en segundo plano), así que tus datos nunca salen de tu dispositivo y la página sigue funcionando sin conexión una vez cargada.
¿Es igual que el jq real?
El motor sigue la sintaxis y la semántica de jq 1.7, incluidas las rutas, los operadores de asignación, reduce, foreach, label/break, try/catch, la desestructuración, los @formatos y la mayoría de las funciones integradas. Pequeñas diferencias: las expresiones regulares usan el motor del navegador en lugar de Oniguruma, las fechas se manejan en UTC, los módulos (import/include) no están disponibles, $ENV está vacío y los números son de coma flotante de 64 bits.
¿Cómo obtengo la salida sin comillas?
Activa -r (salida raw). Así las cadenas se imprimen como texto plano, que es lo que necesitas para listas de nombres, filas @csv o @tsv y scripts de shell. Los números, arrays y objetos se siguen imprimiendo como JSON.
¿Cómo proceso JSON Lines (NDJSON) o varios documentos JSON?
Pégalos uno detrás de otro. jq ejecuta el filtro una vez por valor. Activa -s (slurp) para leer primero todos los valores en un solo array, por ejemplo para contarlos o sumarlos con length o add.
¿Por qué recibo errores "Cannot iterate over null" o "Cannot index"?
El filtro intentó usar .[] o .key sobre un valor de tipo incorrecto, a menudo porque falta un campo (null) en algunos elementos. Añade ? para ignorar los errores (.items[]?), usa // para dar un valor por defecto (.items // []) o filtra antes con select(.items != null).
¿Cómo paso un valor a un filtro como con --arg?
Abre Variables y añade una línea como country=US (una cadena, como --arg) o limit:=10 (JSON, como --argjson). Úsala en el filtro como $country o $limit. La línea de comandos que aparece bajo la salida incluye las opciones --arg correspondientes.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.