🔎 Probador JSONPath
Evalúa consultas JSONPath ($.store.book[*].author) sobre JSON en tiempo real. Soporta filtros, descenso recursivo y comodines.
🔒 Sobre la privacidad
- ・Todo el procesamiento ocurre en tu navegador
- ・Tus datos nunca se envían a ningún servidor
📚 Ayuda de sintaxis JSONPath
$ — Objeto raíz@ — Nodo actual (en filtro).field / ['field'] — Acceso a hijo.. — Descenso recursivo* — Comodín[index] — Índice[start:end:step] — Slice de array[a,b,c] — Múltiples índices[?(@.price < 10)] — Expresión filtro[?(@.tags)] — Existencia de campo📖 Dónde se suele tropezar
Evalúa consultas JSONPath sobre JSON mientras escribes, mostrando los valores coincidentes y cuántos hay, con descenso recursivo, comodines, rebanadas y expresiones de filtro. Todo se ejecuta en el navegador. JSONPath no tuvo especificación formal hasta la RFC 9535 de 2024: durante los diecisiete años anteriores, cada implementación interpretó a su manera un artículo de 2007, y por eso la misma expresión devuelve resultados distintos en implementaciones distintas.
| Caso | Qué ocurre | Qué hacer |
|---|---|---|
| La misma expresión se comporta distinto en cada implementación | La ambigüedad se concentraba en tres puntos: combinar el descenso recursivo con un índice —es $..book[0] el primer elemento de cada array o el primero de todos los libros reunidos; si el resultado es siempre un array o un valor suelto cuando sólo hay uno; y qué ocurre cuando una expresión de filtro referencia un campo inexistente. Como la respuesta cambia en cuanto cambias de implementación, aflora como una actualización que de pronto rompe algo, y como la expresión no cambió, la causa no salta a la vista. |
Elige una biblioteca que declare conformidad con la RFC 9535: todo lo publicado desde 2024 lo indica. En código existente, el único recurso es comprobar el comportamiento real en la documentación de tu biblioteca. En la práctica, evitar las construcciones donde vive la ambigüedad es lo más seguro: no pongas un índice justo después de un descenso recursivo $.., recoge siempre el resultado como array e indéxalo en tu propio código y acompaña los filtros de una comprobación de existencia, como ?(@.price && @.price < 10). Respeta esas tres cosas y las diferencias de implementación apenas te alcanzarán: cuanto más ingeniosa la expresión, menos portable resulta. |
| La expresión de filtro no funciona | Una comparación numérica como ?(@.price < 10) funciona en casi todas las implementaciones, pero la comparación de cadenas topa con el estilo de comillas: hay implementaciones que rechazan las comillas simples de ?(@.category == 'fiction') y otras que rechazan las dobles. La RFC 9535 permite ambas, pero las implementaciones anteriores suelen aceptar sólo una. Peor aún, algunas fallan según haya o no espacios alrededor del operador y otras exigen = en lugar de ==: y ninguna lanza un error; simplemente no devuelven nada. |
Construye la consulta por etapas en vez de escribirla de golpe: mira $, luego $.store, luego $.store.book, luego $.store.book[*] y sólo entonces el filtro, y verás exactamente en qué paso se quedó en cero. Es la forma más rápida de depurar cualquier lenguaje de consulta de este tipo, porque un resultado de cero, por sí solo, no distingue una errata de la ausencia de datos ni de una sintaxis que el analizador no aceptó. Cuando sepas que el filtro es el culpable, prueba a cambiar el estilo de comillas, a quitar los espacios alrededor del operador y == frente a =, en ese orden. Y cuando el filtro que necesitas se complique, escribirlo en código es más legible y además se puede probar. |
| Confundir JSONPath con JMESPath y jq | Los nombres y el aspecto se parecen, pero son tres lenguajes distintos casi sin compatibilidad sintáctica. El --query de la CLI de AWS es JMESPath: Reservations[].Instances[].InstanceId, sin $. kubectl -o jsonpath es un dialecto propio de Kubernetes, envuelto en {}, que permite omitir $ y añade su propio range. jq es un lenguaje de consulta completamente aparte, con tuberías, variables y definiciones de funciones. Esto está detrás de muchos casos en que una expresión encontrada en internet no funciona al pegarla, y descubrir que el artículo sobre JSONPath que leías iba en realidad de JMESPath es una experiencia común. |
Confirma qué lenguaje tienes delante antes de usarlo. Distinguirlos es fácil: si empieza por $, es JSONPath; si no hay $ pero sí [] y |, es JMESPath; una sucesión de .campo, select() y tuberías es jq. Una cosa más: JSONPath es de sólo lectura: no modifica valores, no reestructura, no agrega. Si quieres transformar lo extraído, usa jq, que es un lenguaje de transformación y trae map, group_by y reduce. Como guía: JSONPath para sacar un valor de un archivo de configuración, jq para remodelar JSON en el intérprete de comandos, JMESPath al trabajar con AWS; y cuando puedas elegir, ajustarte a lo que ya se usa en ese entorno es lo que menos fricción genera. |
Antes de echar mano de JSONPath, pregúntate si lo necesitas. Cuando manejas JSON dentro de un programa, analizarlo y recorrer la estructura nativa te da tipos, señala dónde está el error y se puede probar: data.store.book.filter(b => b.price < 10) es claramente más legible que $.store.book[?(@.price<10)] enterrado en una cadena, y tu editor puede autocompletarlo. JSONPath se gana su sitio cuando la consulta se decide en tiempo de ejecución: reglas de extracción dadas en un archivo de configuración, correspondencias definidas por un usuario, condiciones de búsqueda de registros guardadas; situaciones en las que la consulta es un dato. En esos casos, cuidado con las consultas que llegan de fuera: JSONPath en sí no ejecuta código, pero un descenso recursivo $.. sobre un JSON enorme consumirá tu CPU y tu memoria. Limita tanto el tamaño de la entrada como la complejidad de la expresión.
📖 Cómo usar
-
1
Pegar JSONPega el JSON a la izquierda. El botón Ejemplo carga datos.
-
2
Introduce una consultaEscribe una expresión JSONPath que empiece con $. Los resultados se actualizan en tiempo real.
-
3
Revisa el resultadoLos valores coincidentes se muestran a la derecha con el conteo y errores.
❓ Preguntas frecuentes
¿Qué es JSONPath?
¿Cómo se escriben filtros?
¿Cuándo usar el descenso recursivo (..)?
🔗 Herramientas relacionadas
🐛 ¿Encontró un problema con esta herramienta?
Gratis, sin registro. Incluso solo los pasos para reproducir ayudan. Los informes van directamente al operador y se usan para corregir.
¡Gracias por tu reporte!
Tu reporte llegó al operador y se usará para mejorar.