Probador de JSONPath
Escribe una expresión JSONPath y ve el resultado al instante. Cada coincidencia se resalta dentro de tu JSON y aparece en una lista con su ruta normalizada exacta, para que puedas depurar filtros, slices y consultas recursivas en segundos.
Última actualización:
Cómo usar Probador de JSONPath
- Pega tu JSON en el editor de la izquierda, sube un archivo o conserva el ejemplo de la librería.
- Escribe una expresión JSONPath que empiece por
$en el cuadro de consulta, o haz clic en uno de los ejemplos. - Observa cómo se iluminan las coincidencias en la pestaña Resaltado. El contador muestra cuántos nodos coinciden.
- Cambia de pestaña para ver el resultado como array JSON o la lista de rutas normalizadas.
- Copia el resultado o las rutas con un clic y usa la expresión en tu código.
Chuleta de sintaxis JSONPath
| Sintaxis | Significado | Ejemplo |
|---|---|---|
$ | La raíz del documento | $ |
.name / ['name'] | Propiedad hija (usa corchetes para nombres con espacios o símbolos) | $.store['bicycle'] |
..name | Descenso recursivo: la propiedad a cualquier profundidad | $..price |
* | Comodín: todas las propiedades o elementos del array | $.store.*, $..book[*] |
[n] | Índice de array, empezando en cero; los negativos cuentan desde el final | $..book[0], $..book[-1] |
[a,b] | Unión de varios índices o nombres | $..book[0,2], $['a','b'] |
[start:end:step] | Slice de array; el final es exclusivo y todas las partes son opcionales | $..book[1:3], $..book[::2], $..book[-2:] |
[?(expr)] | Filtro: conserva los hijos para los que la expresión es verdadera; @ es el hijo actual | $..book[?(@.price < 10)] |
[?(@.key)] | Prueba de existencia | $..book[?(@.isbn)] |
== != < <= > >= | Comparaciones (números con números, cadenas con cadenas) | [?(@.category == 'fiction')] |
&& || ! y ( ) | Y, o, no lógicos y agrupación | [?(@.price > 5 && [email protected])] |
=~ /re/i | Prueba de expresión regular (extensión de Jayway/Goessner) | [?(@.author =~ /^J/)] |
length() count() match() search() value() | Funciones de RFC 9535 | [?(length(@.tags) > 2)], [?match(@.code, '[A-Z]{3}')] |
Cómo funciona la evaluación
Una expresión JSONPath es una cadena de segmentos. La evaluación empieza con una lista que contiene solo el valor raíz. Cada segmento toma cada nodo de la lista actual y lo sustituye por los nodos que eligen sus selectores, así que la lista puede crecer (comodines, descenso recursivo) o reducirse (nombres, índices, filtros). La lista final es el resultado, siempre en el orden del documento. Este probador sigue RFC 9535: una propiedad inexistente o un índice fuera de rango simplemente no produce coincidencias en lugar de un error, y las comparaciones entre tipos distintos (como "10" < 20) son falsas.
Dentro de un filtro, @ se refiere al hijo que se está evaluando y $ sigue refiriéndose a la raíz del documento, lo que te permite comparar con otros valores, por ejemplo $..book[?(@.price > $.expensive)]. Un operando de comparación debe seleccionar un único valor; una ruta que no coincide con nada se compara como "nada", que solo es igual a otra "nada".
Diferencias entre implementaciones de JSONPath
- Sintaxis de filtros. La sintaxis original de Goessner y Jayway (Java) usan
[?(@.a)]. RFC 9535 también acepta[[email protected]]. Aquí funcionan las dos. - Las expresiones de script como
[(@.length-1)]ejecutaban JavaScript arbitrario en las primeras bibliotecas y se eliminaron del estándar. Usa[-1]en su lugar. - Forma del resultado. Algunas bibliotecas devuelven un solo valor en lugar de un array cuando coincide exactamente un nodo. JSONPath estándar siempre devuelve una lista (lista de nodos), que es lo que muestra la pestaña Resultado.
- Regex.
=~es una extensión de Jayway; los equivalentes portables de RFC 9535 sonmatch()(cadena completa) ysearch()(subcadena).
Preguntas frecuentes
¿Qué es JSONPath?
JSONPath es un lenguaje de consulta para seleccionar valores dentro de un documento JSON, similar a XPath para XML. Lo presentó Stefan Goessner en 2007 y el IETF lo estandarizó como RFC 9535 en 2024. Una expresión siempre empieza en la raíz $ y desciende con segmentos como .store.book[0].
¿Qué diferencia hay entre . y .. en JSONPath?
Un solo punto selecciona un hijo directo, así que $.store.book solo baja un nivel cada vez. Dos puntos son descenso recursivo: $..author encuentra todas las propiedades author a cualquier profundidad del documento.
¿Cómo escribo un filtro JSONPath?
Usa [?( )] con @ representando el elemento actual, por ejemplo $.store.book[?(@.price < 10)] o $..book[?(@.category == 'fiction' && @.price > 10)]. RFC 9535 también admite la forma sin paréntesis: [[email protected] < 10]. Una ruta sola, como [?(@.isbn)], conserva los elementos que tienen esa propiedad.
¿Cómo obtengo el último elemento de un array?
Usa un índice negativo: $..book[-1] devuelve el último libro. Los slices también aceptan negativos: [-2:] devuelve los dos últimos elementos. La antigua sintaxis de script [(@.length-1)] no forma parte de RFC 9535 y no es compatible aquí.
¿Qué es una ruta normalizada?
Una ruta normalizada es la ubicación única y completamente entre corchetes de un valor coincidente, como $['store']['book'][2]['title']. Es el formato definido por RFC 9535 y resulta útil para registros o para señalar exactamente un valor.
¿Por qué mi expresión no devuelve nada?
Las causas habituales son una errata en el nombre de una propiedad (los nombres distinguen mayúsculas y minúsculas), usar . en lugar de .. para una propiedad más profunda, comparar un número con una cadena ("10" no es igual a 10) o un filtro aplicado a un objeto cuando querías su array. Revisa la pestaña Resaltado para ver dónde están realmente los datos.
¿Se envía mi JSON a un servidor?
No. El motor de JSONPath está escrito en JavaScript y se ejecuta dentro de tu navegador, así que tus datos nunca salen de tu dispositivo.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.