En este artículo
¿Qué es JSONPath?
JSONPath es un lenguaje de consulta para extraer datos de documentos JSON. Así como XPath navega documentos XML, JSONPath navega estructuras JSON usando una sintaxis de expresión concisa. Fue formalizado en RFC 9535 (febrero de 2024) tras años de especificación informal.
Las expresiones JSONPath comienzan con $ (el elemento raíz) y usan notación de punto o de corchetes para recorrer el documento. El lenguaje admite comodines, descenso recursivo, segmentación de arrays y expresiones de filtro, lo que permite extraer valores profundamente anidados con una sola expresión.
Sintaxis de JSONPath
JSONPath proporciona varios operadores para navegar y filtrar estructuras JSON.
- Raíz ($) — toda expresión JSONPath comienza con $ que representa el objeto o array raíz del documento JSON
- Notación de punto ($.store.book) — accede a las propiedades hijo por nombre, similar al acceso a objetos en JavaScript. Los puntos separan cada nivel de anidamiento.
- Notación de corchetes ($['store']['book']) — sintaxis alternativa que usa nombres de propiedad entrecomillados entre corchetes. Requerida cuando los nombres de propiedad contienen caracteres especiales o espacios.
- Comodín (*) — coincide con todos los elementos en el nivel actual. $.store.* devuelve todos los hijos directos de store; $[*] devuelve todos los elementos de un array raíz.
- Descenso recursivo (..) — busca todos los descendientes a cualquier profundidad. $..price encuentra cada campo 'price' en cualquier parte del documento, independientemente del nivel de anidamiento.
- Segmentos de array ([inicio:fin:paso]) — selecciona un rango de elementos del array. $[0:3] devuelve los primeros tres elementos; $[-2:] devuelve los dos últimos; $[::2] devuelve cada dos elementos.
Ejemplos de expresiones JSONPath
Aquí hay ejemplos prácticos que muestran cómo las expresiones JSONPath extraen datos de estructuras JSON reales.
- Extracción de valores anidados — $.users[0].name recupera el nombre del primer usuario. $.config.database.host obtiene un valor de configuración profundamente anidado.
- Filtrado de arrays — $.users[?(@.age > 18)] devuelve todos los usuarios mayores de 18 años. $.products[?(@.price < 50)] encuentra productos económicos. Los filtros usan @ para referenciar el elemento actual.
- Consultas multinivel — $..author devuelve cada campo de autor a cualquier profundidad. $.store.book[*].title devuelve todos los títulos de libros. $.orders[*].items[*].sku extrae los SKU de todos los pedidos y artículos.
Estas expresiones se pueden combinar para crear consultas potentes. Por ejemplo, $.store.book[?(@.price < 10)].title devuelve los títulos de todos los libros con precio inferior a 10.
Pruébalo gratis — sin registro
Probar expresiones JSONPath →Casos de uso comunes
JSONPath se usa donde se necesita consultar o extraer datos estructurados de documentos JSON.
- Extracción de respuestas de API — extraiga campos específicos de respuestas de API complejas sin escribir código de análisis personalizado. Pruebe expresiones con respuestas de muestra antes de codificar.
- Análisis de configuración — extraiga valores de archivos de configuración JSON en canales CI/CD, scripts de despliegue y herramientas de infraestructura como código
- Análisis de registros — consulte registros JSON estructurados para encontrar eventos específicos, patrones de errores o métricas de rendimiento en archivos de registro grandes
- Transformación de datos — use JSONPath en canales ETL para seleccionar, filtrar y reformatear datos JSON durante operaciones de importación y exportación
JSONPath vs JQ vs JMESPath
Varios lenguajes de consulta se dirigen a documentos JSON. Cada uno tiene diferentes fortalezas y soporte de ecosistema.
- JSONPath — sintaxis de consulta estándar (RFC 9535), ampliamente compatible con bibliotecas de programación (Java, Python, JavaScript, PHP). Ideal para extracción y filtrado simples. Sin transformación integrada.
- JQ — procesador JSON de línea de comandos con un poderoso lenguaje funcional. Admite transformación, cálculo y formato de salida. Ideal para scripts de shell y procesamiento de datos en línea de comandos.
- JMESPath — lenguaje de consulta utilizado por AWS CLI y Boto3. Sintaxis más estricta que JSONPath con funciones integradas. Ideal para la integración con el ecosistema AWS y las consultas programáticas.
Preguntas frecuentes
¿JSONPath usa indexación de arrays basada en cero o en uno?
JSONPath usa indexación de arrays basada en cero, coherente con la mayoría de los lenguajes de programación. $[0] devuelve el primer elemento, $[1] devuelve el segundo, y así sucesivamente. Los índices negativos cuentan desde el final: $[-1] devuelve el último elemento, $[-2] devuelve el penúltimo.
¿Cómo funcionan las expresiones de filtro en JSONPath?
Las expresiones de filtro usan la sintaxis [?(expresión)] donde @ hace referencia al elemento actual que se está evaluando. Puede usar operadores de comparación (==, !=, <, >, <=, >=), operadores lógicos (&& y ||) y acceso a propiedades (por ejemplo, @.name). Ejemplo: $[?(@.status == 'active')] devuelve elementos donde status es igual a 'active'.
¿Son compatibles todas las implementaciones de JSONPath?
No del todo. Antes de RFC 9535 (2024), JSONPath no tenía un estándar formal y las implementaciones variaban. Las diferencias comunes incluyen la sintaxis de expresiones de filtro, el comportamiento del descenso recursivo y el manejo de propiedades faltantes. RFC 9535 busca estandarizar el comportamiento, pero las bibliotecas más antiguas pueden seguir convenciones diferentes. Siempre pruebe las expresiones con su implementación específica.