araç köşesi

Probador de expresiones JSONPath

Pruebe una expresión JSONPath sobre el JSON que pegue; vea los valores encontrados, sus rutas y el número de coincidencias

Sus datos se quedan con usted. La conversión ocurre dentro del navegador; no se envía nada a ningún servidor.

Cómo funciona

JSONPath sirve para sacar una parte de un JSON grande con una expresión de una línea; lo usan las pruebas de Postman, los API gateways y el comando kubectl -o jsonpath de Kubernetes. Pegue el JSON en el panel izquierdo y escriba la expresión; el resultado se actualiza a la derecha mientras escribe. Toda expresión empieza con $, que es la raíz del documento: $.store.book[0].title da el título del primer libro y $..author todos los campos author, estén donde estén. Un filtro entre corchetes, [?(@.price<10)], deja solo los elementos que cumplen la condición; @ es el elemento que se está revisando. En el JSON de ejemplo, $.store.book[?(@.price<10)].title devuelve dos títulos: Sayings of the Century y Moby Dick. Tenga en cuenta que en JSON los decimales siempre llevan punto (8.95), aunque en español se escriba 8,95; en la expresión también use punto. Si olvida el $ inicial, la herramienta lo agrega y lo indica abajo. Si nada coincide, el resultado es un array vacío: revise mayúsculas y minúsculas. La salida de rutas muestra la dirección exacta de cada valor, útil para saber qué cadena de claves usar en su código.

Esta herramienta también se busca como jsonpath online, probar jsonpath, jsonpath tester, jsonpath ejemplos, evaluador jsonpath.

¿Qué es JSONPath?

JSONPath es un lenguaje de consulta corto para elegir valores dentro de un documento JSON; es para JSON lo que XPath es para XML. $ marca la raíz, el punto un campo hijo, [0] un elemento de array, [*] todos los elementos, .. cualquier profundidad y [?(...)] un filtro con condición. Desde 2024 es el estándar RFC 9535; lo usan Postman, Kubernetes y muchas herramientas de API.

¿Qué es Expresión de filtro?

Un filtro deja, de los elementos de un array, solo los que cumplen una condición: [?(@.price<10)] conserva los que cuestan menos de 10. @ representa el elemento que se está revisando; se pueden usar ==, !=, <, >, && y ||. Escrito sin comparación, como [?(@.isbn)], deja los elementos en los que ese campo existe y no está vacío.

¿Qué diferencia hay entre JSONPath y JSON Pointer?

JSON Pointer (RFC 6901) es la dirección exacta de un solo valor: /store/book/0/author da como mucho un resultado y no conoce comodines ni filtros; se usa en JSON Patch y en $ref de JSON Schema. JSONPath es un lenguaje de consulta: una sola expresión como $..author puede devolver muchos valores y admite filtros con condición. Para cambiar un valor o hacer referencia a él, use JSON Pointer; para buscar y filtrar datos, use JSONPath.

Expresiones JSONPath más usadas (con el JSON de ejemplo)

Puede probar estas expresiones directamente sobre el JSON de ejemplo de la página, el catálogo de librería que Stefan Goessner publicó en 2007 al definir JSONPath. La mayoría de las herramientas actuales reconocen esa misma sintaxis.

  • $..author → los cuatro autores (.. busca a cualquier profundidad)
  • $.store.book[?(@.price<10)].title → los dos títulos con precio menor que 10
  • $..book[?(@.isbn)] → los libros que tienen campo isbn (Moby Dick y The Lord of the Rings)
  • $..book[-1:] → el último libro; $..book[0,1] → los dos primeros
  • $..book.length → número de libros (4)
  • $..price → cinco precios: los cuatro libros y la bicicleta

Límites honestos: diferencias con RFC 9535 y seguridad

JSONPath se estandarizó en 2024 con el RFC 9535. Esta herramienta usa la biblioteca jsonpath-plus y sigue la sintaxis original de Goessner: los filtros se escriben con paréntesis ([?(@.price<10)]; en el RFC son opcionales), funcionan propiedades de JavaScript como .length y no existen las funciones match() y search() del RFC. La misma expresión puede dar un resultado algo distinto en otra biblioteca, sobre todo al comparar textos dentro de un filtro.

Los filtros no se ejecutan con el eval del navegador, sino con el intérprete seguro de la biblioteca: no se puede escribir y ejecutar código en la expresión. Si un filtro mira un campo que no existe (@.publisher.name cuando no hay publisher), no es un error: ese elemento simplemente no coincide.

Preguntas frecuentes

¿Cómo pruebo una expresión JSONPath?

Pegue el JSON en el panel izquierdo de esta página y escriba la expresión en la casilla JSONPath. Los valores encontrados aparecen a la derecha al instante y abajo se indica cuántas coincidencias hubo. Si pone Resultado en Rutas encontradas, verá la dirección exacta de cada valor dentro del JSON.

¿Qué diferencia hay entre $. y $..?

Un punto baja un solo nivel: $.store.bicycle da solo el campo bicycle del objeto store. Dos puntos buscan a cualquier profundidad: $..price devuelve los precios de los libros y de la bicicleta, cinco valores en total. Si no sabe dónde está un campo, use ..

¿Cómo comparo un texto dentro de un filtro?

Escriba el texto entre comillas: $.store.book[?(@.category=='fiction')].title devuelve los tres títulos de ficción. Puede unir condiciones con && (y) o || (o): [?(@.category=='fiction' && @.price<15)] deja Sword of Honour y Moby Dick. Si una comilla queda sin cerrar, la herramienta lo avisa.

¿Mi JSON se envía a un servidor?

No. La lectura del JSON y la ejecución de la expresión ocurren por completo en su navegador; puede probar sin riesgo una respuesta que contenga claves de API o datos de clientes.