§

Probar expresiones JSONPath

Formato de salida:
Referencia rápida de JSONPath
Token Meaning
$Elemento raíz del documento
@Elemento actual (usado dentro de expresiones de filtro)
.Operador de miembro hijo: selecciona un hijo nombrado
..Descenso recursivo: busca en todos los descendientes
*Comodín: coincide con cualquier elemento o propiedad
[*]Todos los elementos de un array
[n]Elemento del array en el índice n (base cero)
[start:end]Slice del array desde start hasta end (sin incluir)
[?(@.x)]Filtro: elementos donde existe la propiedad x
[?(@.x==1)]Filtro: elementos donde la propiedad x es igual a 1
[(@.length-1)]Expresión de script: último elemento de un array

JSONPath aparece dondequiera que un contrato de API tenga que verificarse contra una carga útil real. Los equipos de fintech que escriben suites de regresión en Postman afirman campos de respuesta con JSONPath en la pestaña Test, los scripts de prueba de carga k6 extraen valores de las respuestas de la API con jsonpath() para establecer umbrales SLA dentro de bloques check(), y los runbooks de guardia de SRE recurren a expresiones de filtro como [?(@.status=="error")] para segmentar los logs JSON de CloudWatch antes de hacer una alerta. Ejecutar esas expresiones en una pestaña del navegador mantiene las cargas de fixture propietarias, el PII de clientes y las respuestas de API previas al lanzamiento fuera de cualquier servicio de consulta alojado.

¿Qué es JSONPath?

JSONPath es un lenguaje de consulta para documentos JSON, el equivalente JSON de XPath para XML. Stefan Goessner lo propuso en 2007 como una forma corta y legible de apuntar a un nodo dentro de un árbol JSON sin escribir un analizador. Una expresión comienza con el selector raíz $ y encadena accesores de propiedad, subíndices de array, comodines, descenso recursivo y condiciones de filtro hasta seleccionar los nodos que deseas. En 2024 el IETF publicó RFC 9535 para estandarizar la sintaxis que se había fragmentado en distintas implementaciones; este probador corre sobre jsonpath-plus, una implementación JavaScript ampliamente utilizada que cubre el borrador de Goessner, la mayor parte del RFC 9535 y algunos operadores de extensión adicionales.

Cómo funciona JSONPath

Una expresión JSONPath se lee de izquierda a derecha y recorre un documento JSON paso a paso. Cada paso toma el conjunto de nodos que sobrevivieron al paso anterior y lo estrecha más. El pipeline de evaluación completo:

  1. Ancla con el selector raíz $. Cada expresión comienza aquí, apuntando al valor de nivel superior, ya sea un objeto o un array. Los nombres de propiedad sin un $ inicial no son JSONPath válido.
  2. Entra en los miembros hijo con notación de punto ($.store.book) o notación de corchetes ($['store']['book']). La notación de corchetes es necesaria cuando una clave contiene un espacio, un guion o cualquier carácter que no sea un identificador válido.
  3. Busca en todos los niveles a la vez con el operador de descenso recursivo ... La expresión $..author recopila cada valor author en cualquier parte del árbol, independientemente de la profundidad. Este es el operador que JMESPath no tiene.
  4. Selecciona elementos del array por índice ([0], [-1] para el último elemento en jsonpath-plus), hazles slice con notación [start:end] ([0:3] devuelve los tres primeros), o toma todos los elementos con el comodín [*].
  5. Filtra elementos con un predicado dentro de [?(...)]. Dentro del predicado, @ se refiere al elemento actual, por lo que [?(@.price<10)] mantiene solo los elementos cuyo campo price es menor que 10. Los filtros se componen con el resto de la ruta, así que puedes filtrar y luego descender, o descender y luego filtrar.
  6. Elige el formato de salida. Valores devuelve los datos coincidentes en sí. Rutas devuelve el JSONPath de cada coincidencia para que puedas ver lo que resolvió el motor. Punteros devuelve el equivalente RFC 6901 JSON Pointer para cada coincidencia, útil cuando el consumidor posterior es JSON Patch o un validador de JSON Schema.

¿Por qué usar este probador de JSONPath?

  • Tu JSON nunca sale del navegador. La consulta se ejecuta dentro de la página, por lo que los fixtures de producción, el PII de clientes y las respuestas de API previas al lanzamiento permanecen en tu máquina.
  • El motor es jsonpath-plus 9.x, la misma biblioteca que respalda muchas suites de pruebas de producción y afirmaciones de CI. Los resultados que ves aquí coinciden con los que verá tu pipeline de compilación.
  • Tres modos de salida cubren los consumidores posteriores más comunes: Valores en bruto para copiar y pegar, Rutas para depurar la resolución del motor y RFC 6901 Punteros para flujos de trabajo de JSON Patch y JSON Schema.
  • Las expresiones de filtro se ejecutan con preventEval: true, por lo que una consulta pegada no puede ejecutar JavaScript arbitrario contra la página anfitriona. Eso importa cuando la expresión viene de un mensaje de Slack, un ticket de Jira o el portapapeles de un colega.

Aplicaciones comunes de JSONPath

JSONPath aparece en cualquier lugar donde el código tenga que extraer un campo de una carga útil JSON sin escribir un descenso recursivo a mano:

  • Pruebas en Postman: la pestaña Tests en Postman expone pm.response.json() junto con acceso estilo JSONPath para afirmaciones. Los equipos escriben una sola expresión como $.data.user.email para extraer un campo de una respuesta y afirmarlo en CI.
  • Pruebas de carga en k6: los scripts de k6 llaman a jsonpath() dentro de un bloque check() para extraer valores de los cuerpos de respuesta y afirmar umbrales SLA. La misma expresión que probó un contrato en Postman puede bloquear una prueba de carga en k6.
  • DSL JSON para transformaciones de datos: AWS Step Functions evalúa JSONPath dentro de InputPath, ResultPath y Parameters para remodelar las cargas útiles de eventos entre estados. Argo Workflows usa JSONPath en withParam para distribuir tareas en paralelo sobre un array. kubectl -o jsonpath de Kubernetes usa la misma sintaxis para extraer campos de objetos del clúster.

Ejemplo práctico

El fixture canónico de Goessner es el documento de la librería con cuatro libros, cada uno con category, author, title y price. Contra ese fixture, la expresión $.store.book[?(@.price<10)].title se ejecuta en tres pasos. Primero, $.store.book se resuelve al array de los cuatro libros. A continuación, el filtro [?(@.price<10)] mantiene solo el libro con precio inferior a 10 (la entrada a 8,95). Finalmente, .title extrae el título de ese libro. El resultado es ["Sayings of the Century"]. Cambiando a Rutas devuelve ["$['store']['book'][0]['title']"], y Punteros devuelve ["/store/book/0/title"].

Prototipa tus expresiones aquí y luego transfiérelas directamente a Postman, k6, kubectl o una máquina de estados de Step Functions. Pega, consulta, copia. Nada cruza la red.

¿Qué es JSONPath?

JSONPath es un lenguaje de consulta para documentos JSON, análogo a XPath para XML. Propuesto por Stefan Goessner en 2007 y estandarizado por el IETF como RFC 9535 en 2024, utiliza una sintaxis de expresión compacta que comienza con $ (la raíz del documento) y admite notación de punto, subíndices de array, comodines, slices, descenso recursivo (..) y expresiones de filtro ([?(...)]) para seleccionar nodos dentro de un árbol JSON.

¿En qué se diferencia JSONPath de JMESPath o jq?

Los tres consultan JSON, pero su gramática y objetivos difieren. JMESPath es el estándar de AWS CLI / SDK: más estricto que JSONPath, sin descenso recursivo, diseñado para proyecciones predecibles sin efectos secundarios. jq es un lenguaje de scripts Turing-completo que no solo consulta JSON sino que también lo transforma, reduce y transmite. JSONPath se sitúa entre ellos: más expresivo que JMESPath gracias al descenso recursivo y los filtros, más ligero que jq, y la sintaxis más ampliamente admitida en herramientas de pruebas de propósito general (Postman, Playwright, REST Assured, kubectl, Step Functions). Este probador implementa JSONPath.

¿Qué dialecto usa este probador?

Este probador ejecuta jsonpath-plus 9.x. Esa biblioteca implementa la especificación Goessner de 2007, cubre la mayor parte del RFC 9535 y añade operadores de extensión como comprobaciones de tipo (@.string(), @.number(), @.boolean()) y navegación padre (^). El indicador preventEval: true siempre está activado, por lo que los predicados de filtro se ejecutan a través de un intérprete seguro en lugar del built-in eval() de JavaScript. Una consulta pegada no puede ejecutar código arbitrario contra esta página.

¿Puedo copiar valores coincidentes individuales?

Sí. El botón Copiar al portapapeles copia el bloque de resultado completo como un array JSON. Para obtener un solo valor, cambia el modo de salida a Valores, selecciona la línea que quieres en el área de texto de resultados y usa el atajo de copia normal de tu navegador (Ctrl/Cmd + C). La salida es texto JSON plano, por lo que se pega limpiamente en un editor de código, una terminal, una prueba de Postman o un mensaje de Slack.