Probador JSONPath

Probar expresiones JSONPath sobre JSON

Entrada JSON
1
2
3
4
5
6
7
8
Procesado localmente en su navegador
Entendiendo JSONPath
TL;DR

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

OperadorDescripcionEjemplo
$Objeto raiz$ devuelve el documento completo
.keyMiembro hijo$.store accede a la propiedad store
..keyDescenso 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)]FiltroDevuelve elementos donde la condicion es verdadera
@Elemento actualUsado dentro de expresiones de filtro

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.

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 Tree Navigation A tree diagram showing how the expression $.store.books[0].title traverses from root ($) through store, books array, first element [0], to the title field. $.store.books[0].title $ store meta books [] city [0] [1] title price Result "The Hobbit" Traversed path Not selected

JSONPath vs jq

Aunque JSONPath y jq consultan JSON, sirven en contextos diferentes:

CaracteristicaJSONPathjq
EntornoBibliotecas, navegadores, APIsLinea de comandos
Estilo de sintaxisNotacion de puntos ($.store.books)Basado en pipes (.store.books)
TransformacionSolo lectura (consulta)Lectura + transformacion + construccion
ComplejidadConsultas simplesPipelines de datos complejos
EstandarRFC 9535 (2024)Estandar de facto para CLI
Ideal paraPruebas de API, consultas de configuracionProcesamiento 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

Filtrar libros por precio Válido

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
Ruta a clave inexistente Válido

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