← Volver a la herramienta JSON
Consulta JSONPath
Última actualización: 2 de octubre de 2026
Ejecuta una expresión JSONPath sobre un documento JSON y ve cada coincidencia con la ruta donde se encontró. La consulta se ejecuta en tu navegador; el documento no se envía a ningún sitio.
Qué hace el lenguaje de consulta
JSONPath es al JSON lo que la ruta de una carpeta al sistema de archivos: una forma compacta de decir qué valores quieres. $ es la raíz del documento, .name entra en una propiedad y […] selecciona dentro de un array.
- Hijos:
$.store.bicycle.color, o$['store']['bicycle']['color']cuando el nombre necesita comillas. - Comodines:
$.store.book[*].titletoma el título de cada libro;$.store.*toma cada valor del objeto store. - Descenso recursivo:
$..priceencuentra unpricea cualquier profundidad. Potente y fácil de pasarse — ver abajo. - Índices y cortes:
[0],[-1]para el último,[0:2]para los dos primeros,[0:5:2]con paso. - Uniones:
[0,2]y['book','bicycle']seleccionan varios a la vez. - Filtros:
[?(@.price < 10)]conserva los elementos de precio inferior a diez, con== != < <= > >=y combinaciones con&&y||.
Los filtros comprueban existencia, no veracidad
Una ruta sola dentro de un filtro pregunta si la propiedad está. Por eso [?(@.inStock)] coincide con un elemento cuyo inStock es false: la propiedad existe — la lectura de la RFC 9535. Cuando te refieres al valor, dilo: [?(@.inStock == true)]. Es la sorpresa más común de JSONPath, y es una propiedad del lenguaje, no de esta herramienta.
Lo que deliberadamente no hace
Las funciones de filtro como length(), match() y search() no están implementadas, ni las expresiones regulares, ni las expresiones de script entre paréntesis, ni las extensiones de padre/hermanos que añaden algunas bibliotecas. Una consulta que las use se rechaza con un mensaje en lugar de devolver en silencio un resultado incorrecto: la página declara lo que admite, así que una coincidencia aquí significa lo que dice.
Preguntas frecuentes
¿Qué sintaxis de JSONPath es compatible?
La raíz $, el acceso a hijos con .name o ['name'], los comodines .* y [*], el descenso recursivo ..name y ..*, los índices de array incluidos los negativos, los cortes [start:end:step], las uniones como [0,1] y ['a','b'], y los filtros [?(@.price < 10)] con los operadores == != < <= > >= combinados con && y ||.
¿Qué no es compatible?
Las funciones de filtro como length(), match() y search(), las expresiones regulares, las expresiones de script entre paréntesis y las extensiones que añaden algunas bibliotecas (referencias al padre y a los hermanos). Una consulta que las use se rechaza en lugar de devolver en silencio un resultado incorrecto.
¿Por qué ?(@.inStock) coincide con elementos cuyo inStock es false?
Porque una ruta sola dentro de un filtro comprueba existencia, no veracidad: pregunta si la propiedad está, y una propiedad puesta a false sigue estando. Para comprobar el valor, escríbelo: ?(@.inStock == true). Esa es la lectura del filtro en la RFC 9535.
¿Cada coincidencia me dice de dónde viene?
Sí. Cada resultado se lista con la ruta donde se encontró, en la misma notación de puntos y corchetes con la que se escriben las consultas, así que la ruta se puede pegar de vuelta en una consulta o en otra herramienta JSON.
¿Se sube mi documento?
No. El documento se analiza con JSON.parse en tu navegador y la consulta se ejecuta en memoria. No se sube nada y la página sigue funcionando sin conexión.
¿Por qué $..price devolvió más de lo que esperaba?
El descenso recursivo visita todos los niveles del documento, así que ..price encuentra una propiedad price dondequiera que esté — dentro de arrays, objetos anidados y ramas no relacionadas. Para acotarlo, ancla la consulta con más ruta, por ejemplo $.store.book[*].price.
¿Prefieres comprobar el documento con un esquema? JSON Schema lo hace. ¿Has encontrado un fallo? Escríbenos.