Probador de JMESPath
Escribe una expresión JMESPath y ve el resultado al instante. Pruébala con salidas realistas de AWS CLI (instancias EC2, objetos S3) o pega tu propio JSON, y luego copia un comando --query listo para ejecutar en Bash, PowerShell o cmd.
Última actualización:
Usa la expresión con cualquier comando de AWS CLI mediante --query. Las comillas cambian según la shell:
Añade --output table o --output text para cambiar el formato; la consulta en sí es la misma.
Cómo usar Probador de JMESPath
- Elige datos de ejemplo (EC2, S3, personas o pedidos) o pega tu propio JSON, por ejemplo la salida de un comando de AWS CLI.
- Escribe una expresión JMESPath en el cuadro de consulta, o haz clic en uno de los ejemplos.
- Lee el resultado a la derecha. La etiqueta muestra su tipo y tamaño; null significa que nada coincidió.
- Revisa la pestaña Árbol de análisis si el resultado te sorprende, para ver cómo se agruparon las proyecciones y los pipes.
- Abre la pestaña AWS CLI y copia el comando --query con las comillas adecuadas para tu shell.
Chuleta de sintaxis de JMESPath
| Sintaxis | Qué hace | Ejemplo |
|---|---|---|
a.b | Subexpresión: la clave b dentro de a; las claves inexistentes dan null | State.Name |
"key-name" | Identificador entre comillas para claves con espacios, guiones o dígitos iniciales | "first-name" |
[0], [-1] | Índice en una lista; los negativos cuentan desde el final | Contents[-1] |
[start:stop:step] | Porción (slice); stop es exclusivo y todas las partes son opcionales | people[:2], items[::-1] |
[*] | Proyección de lista: aplica el resto de la expresión a cada elemento | people[*].name |
[] | Aplana un nivel y luego proyecta | Reservations[].Instances[] |
.* | Proyección de objeto sobre todos los valores de un objeto | regions.*.endpoint |
[?expr] | Proyección de filtro: conserva los elementos en los que expr es verdadero | [?Size > `1000`] |
== != < <= > >= | Comparaciones; las de orden solo funcionan con números | [?age >= `18`] |
&& || ! | And, or (devuelve el primer valor verdadero), not | city || 'unknown' |
[a, b] | Lista multiselect: crea un array por elemento | [InstanceId, State.Name] |
{k: a} | Hash multiselect: crea un objeto con nuevos nombres de clave | {ID: InstanceId} |
| | Pipe: detiene la proyección y aplica el lado derecho a todo el resultado | people[*].name | [0] |
@ | El nodo actual | length(@) |
`json`, 'raw' | Literal JSON y literal de cadena sin procesar (raw string) | `30`, `true`, 'prod' |
&expr | Referencia a expresión, que se pasa a sort_by, max_by, min_by, map | sort_by(Contents, &Size) |
Funciones integradas
| Función | Devuelve |
|---|---|
length(x) | Caracteres de una cadena, elementos de una lista o claves de un objeto |
sort(list), sort_by(list, &key) | Lista ordenada (solo números o cadenas; sort_by es estable) |
max, min, max_by, min_by | Valor o elemento mayor o menor (null para una lista vacía) |
sum(list), avg(list) | Suma y media de una lista de números |
contains(list|string, value) | True si la lista contiene el valor o la cadena contiene la subcadena |
starts_with, ends_with | Comprobaciones de prefijo y sufijo en cadenas |
join(sep, list) | Une una lista de cadenas en una sola cadena |
keys(obj), values(obj), merge(a, b, …) | Claves y valores de un objeto, y una combinación superficial (gana el último) |
map(&expr, list) | Aplica una expresión a cada elemento, conservando los null |
not_null(a, b, …) | Primer argumento que no es null |
to_string, to_number, to_array, type | Conversiones y el nombre del tipo |
abs, ceil, floor, reverse | Utilidades matemáticas e inversión de una lista o cadena |
Consejos para consultas de AWS CLI
- Las proyecciones se detienen en un pipe.
Reservations[].Instances[].Tags[0]devuelve la primera etiqueta de cada instancia, mientras queReservations[].Instances[].Tags | [0]devuelve la lista completa de etiquetas solo de la primera instancia. - Leer etiquetas:
Tags[?Key=='Name'].Value | [0]convierte la lista de etiquetas clave/valor de AWS en un solo nombre. - Valores verdaderos:
false,null, las cadenas vacías, las listas vacías y los objetos vacíos son falsos; el número 0 es verdadero. - Lado del servidor o del cliente:
--queryfiltra después de recibir la respuesta. Para reducir lo que devuelve AWS, combínalo con--filterso con las opciones del propio comando en el lado del servidor. - Salida en tabla: un hash multiselect como
{ID: InstanceId, Type: InstanceType}da columnas bien etiquetadas con--output table.
Preguntas frecuentes
¿Qué es JMESPath?
JMESPath (se pronuncia «James path») es un lenguaje de consulta para JSON con una especificación formal y un conjunto de pruebas de conformidad, así que la misma expresión da el mismo resultado en Python, JavaScript, Go, Java y otras implementaciones. Es el lenguaje que hay detrás de la opción --query de AWS CLI y de la opción --query de Azure CLI.
¿Cómo uso JMESPath con AWS CLI?
Añade --query seguido de la expresión, por ejemplo aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId'. La CLI aplica la expresión a la respuesta JSON en tu equipo antes de imprimirla, así que puedes combinarla con --output table o --output text. Prueba primero la expresión aquí y luego cópiala desde la pestaña AWS CLI.
¿Por qué necesito comillas invertidas alrededor de los números?
En JMESPath un número suelto no es un valor, así que [?age > 30] es un error de sintaxis. Los literales JSON van entre comillas invertidas: [?age > `30`]. Las cadenas pueden usar comillas de cadena literal: [?name == 'Ava']. Las comillas dobles son para identificadores que contienen caracteres especiales, como "first-name".
¿Qué diferencia hay entre [*] y []?
Ambos crean una proyección sobre una lista. [*] mantiene la estructura, así que Reservations[*].Instances[*].InstanceId devuelve una lista de listas. [] además aplana un nivel, así que Reservations[].Instances[].InstanceId devuelve una sola lista plana de ID, que suele ser lo que quieres con la salida de AWS.
¿Por qué mi filtro devuelve una lista vacía o null?
Una clave inexistente devuelve null en lugar de un error, y las comparaciones de orden como < solo funcionan con números. Causas comunes: una errata o mayúsculas/minúsculas incorrectas en el nombre de una clave, comparar un número con una cadena como `"30"`, aplicar un filtro a un objeto en lugar de a una lista u olvidar las comillas invertidas alrededor de un número.
¿En qué se diferencia JMESPath de JSONPath y jq?
JSONPath solo selecciona valores existentes y su comportamiento varía entre bibliotecas (se estandarizó tarde, como RFC 9535). JMESPath también puede reorganizar los resultados con hashes multiselect y funciones integradas, y todas las implementaciones siguen una única especificación. jq es un lenguaje de programación completo con variables y aritmética, pero es una herramienta de línea de comandos aparte y no algo integrado en las CLI de AWS y Azure.
¿Se envía mi JSON a algún sitio?
No. El motor JMESPath es JavaScript puro que se ejecuta dentro de esta página. Tu JSON, incluidos los detalles de tus recursos de AWS, se queda en tu navegador.
¿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.