Probador JSONPath
Probar expresiones JSONPath sobre JSON
JSONPath es un lenguaje de consulta para extraer datos de documentos JSON -- como XPath para XML. Navega objetos anidados y arrays sin escribir codigo.
Que es JSONPath?
JSONPath es un lenguaje de consulta para extraer valores especificos de documentos JSON. Proporciona una sintaxis concisa para navegar objetos anidados y arrays, filtrar elementos por condiciones y seleccionar multiples valores a la vez — todo sin escribir codigo procedimental.
Piensa en JSONPath como el equivalente JSON de XPath para XML, o los selectores CSS para HTML. En lugar de escribir bucles y sentencias condicionales para recorrer un arbol JSON, escribes una sola expresion que describe los datos que deseas. El motor JSONPath se encarga del recorrido y devuelve los valores coincidentes.
JSONPath es especialmente valioso al trabajar con respuestas de API. Las APIs modernas frecuentemente devuelven estructuras JSON profundamente anidadas — una sola respuesta puede contener docenas de objetos y arrays anidados. JSONPath te permite extraer quirurgicamente los campos que necesitas sin navegar manualmente cada nivel de anidamiento.
Sintaxis de JSONPath
Cada expresion JSONPath comienza con $, que representa la raiz del documento JSON. Desde ahi, encadenas operadores para navegar mas profundamente en la estructura.
Referencia de sintaxis
| Operador | Descripcion | Ejemplo |
|---|---|---|
$ | Objeto raiz | $ devuelve el documento completo |
.key | Miembro hijo | $.store accede a la propiedad store |
..key | Descenso recursivo | $..price encuentra todos los campos price a cualquier profundidad |
[0] | Indice de array | $.books[0] devuelve el primer libro |
[*] | Comodin | $.books[*] devuelve todos los libros |
[0:3] | Segmento de array | $.books[0:3] devuelve los libros en los indices 0, 1, 2 |
[?(@.price<10)] | Filtro | Devuelve elementos donde la condicion es verdadera |
@ | Elemento actual | Usado dentro de expresiones de filtro |
Navegacion de objetos
La notacion de puntos (.key) accede a una propiedad nombrada del objeto actual. Puedes encadenar puntos para recorrer multiples niveles:
$.store.address.city
Esto navega desde la raiz a store a address a city. Si alguna clave intermedia no existe, el resultado esta vacio.
Navegacion de arrays
Los elementos de un array se acceden por indice basado en cero ([0], [1], etc.) o por comodin ([*] para todos los elementos). Los indices negativos cuentan desde el final: [-1] devuelve el ultimo elemento.
El segmentado de arrays sigue el patron [start:end:step], similar a Python:
[0:3]— Elementos en los indices 0, 1, 2[1:]— Todos los elementos desde el indice 1 en adelante[::2]— Cada segundo elemento
Descenso recursivo
El operador .. busca recursivamente a traves de todo el arbol del documento. $..price encuentra cada propiedad llamada price, sin importar cuan profundamente este anidada. Esto es poderoso pero puede ser lento en documentos grandes porque recorre cada nodo.
Expresiones de filtro
Los filtros usan la sintaxis [?(@.condicion)] donde @ se refiere al elemento actual. Los filtros soportan operadores de comparacion (==, !=, <, >, <=, >=) y operadores logicos (&&, ||).
Ejemplos:
$.books[?(@.price < 10)]— Libros con precio menor a 10$.books[?(@.author == 'Tolkien')]— Libros de Tolkien$.books[?(@.price < 20 && @.category == 'fiction')]— Libros de ficcion economicos
Recorrido del arbol JSONPath
JSONPath vs jq
Aunque JSONPath y jq consultan JSON, sirven en contextos diferentes:
| Caracteristica | JSONPath | jq |
|---|---|---|
| Entorno | Bibliotecas, navegadores, APIs | Linea de comandos |
| Estilo de sintaxis | Notacion de puntos ($.store.books) | Basado en pipes (.store.books) |
| Transformacion | Solo lectura (consulta) | Lectura + transformacion + construccion |
| Complejidad | Consultas simples | Pipelines de datos complejos |
| Estandar | RFC 9535 (2024) | Estandar de facto para CLI |
| Ideal para | Pruebas de API, consultas de configuracion | Procesamiento de logs, pipelines de datos |
JSONPath es ideal cuando necesitas extraer datos de JSON sin transformarlos — por ejemplo, probar respuestas de API o construir consultas de configuracion. jq es mas poderoso cuando necesitas reorganizar, filtrar, agregar o construir nuevas estructuras JSON.
Casos de uso comunes
- Depuracion de APIs: Pegar una respuesta compleja de API y escribir consultas JSONPath para validar que los campos esperados existen y contienen valores correctos
- Extraccion de configuracion: Obtener valores especificos de archivos de configuracion JSON grandes sin analizar la estructura completa en codigo
- Aserciones en pruebas: Las pruebas automatizadas usan JSONPath para verificar valores especificos en respuestas de API, haciendo el codigo de prueba mas legible que el acceso a propiedades anidadas
- Pipelines de transformacion de datos: Extraer campos especificos de documentos JSON como parte de flujos de trabajo ETL
- Documentacion: Las expresiones JSONPath en la documentacion de API muestran a los consumidores exactamente como acceder a campos especificos de la respuesta
Prueba estos ejemplos
Esta expresion JSONPath navega al objeto 'store', filtra el array 'books' por elementos donde el precio es menor a 10, y devuelve solo el campo 'title'. El simbolo @ se refiere al elemento actual que se esta evaluando.
$.store.books[?(@.price < 10)].title Consultar una ruta que no existe en el documento JSON devuelve un conjunto de resultados vacio -- no un error. Esto es util para verificar de forma segura si una clave existe sin causar un fallo.
$.nonexistent