Consulta y filtra JSON con expresiones JSONPath en tiempo real
También podrías necesitar
JSONPath es el equivalente de XPath para JSON: un lenguaje de consulta que permite navegar, filtrar y extraer datos de cualquier documento JSON sin código. Originalmente propuesto por Stefan Goessner en 2007, hoy es parte del estándar RFC 9535 y está implementado en Python (jsonpath-ng), Java (jayway), JavaScript (jsonpath) y herramientas como jq. Esta implementación pura en TypeScript soporta los operadores más usados: `$` (raíz), `.key` (acceso a propiedad), `[0]` e `[-1]` (indexación de arrays, incluyendo índices negativos), `[*]` y `.*` (wildcard para todos los elementos), `..key` (recursive descent — busca en toda la profundidad del árbol), `[0:3]` (slice de array), `[0,2,4]` (union de índices) y `[?(@.price > 10)]` (filtros con expresiones de comparación). Los resultados se muestran como un array JSON con todos los valores que coinciden y un contador de resultados. El análisis ocurre 100% en el navegador.
¿Qué es JSONPath y cuándo usarlo?
JSONPath es un lenguaje de consulta para JSON, similar a XPath para XML. Úsalo cuando necesites extraer valores específicos de respuestas de API anidadas, filtrar arrays de objetos por condiciones, o navegar estructuras JSON complejas sin escribir código JavaScript. Es el lenguaje base de herramientas como AWS CloudFormation, Kubernetes y muchas implementaciones de API Gateway.
¿Qué diferencia hay entre `.key` y `..key`?
`.key` (dot child) accede a la propiedad `key` directamente en el nivel actual del objeto. `..key` (recursive descent) busca la propiedad `key` en todos los niveles del árbol — el objeto raíz, sus hijos, los hijos de sus hijos, etc. Por ejemplo, `$..id` devuelve todos los valores de `id` en cualquier profundidad del JSON.
¿Cómo funcionan los filtros `[?(@.key == value)]`?
Los filtros evalúan una expresión por cada elemento del array y devuelven solo los que cumplen la condición. `@` hace referencia al elemento actual del array. Soporta los operadores: `==`, `!=`, `>`, `<`, `>=`, `<=`. Ejemplo: `$.users[?(@.age >= 18)]` devuelve todos los usuarios mayores de edad. Los strings en los filtros deben ir entre comillas simples: `[?(@.status == 'active')]`.
¿Qué es el slice de array `[0:3]`?
El slice funciona igual que en Python: `[start:end]` devuelve los elementos desde el índice `start` (incluido) hasta `end` (excluido). `[0:3]` devuelve los primeros 3 elementos. `[1:]` devuelve todos excepto el primero. `[:3]` equivale a `[0:3]`. Los índices negativos no están soportados en el slice de esta implementación — usa índices positivos.
¿Es compatible con la implementación de jq o Jayway?
Esta implementación cubre el subconjunto más común de JSONPath (RFC 9535 core). Los operadores básicos son compatibles con Jayway (Java), jsonpath-ng (Python) y la mayoría de implementaciones. Puede haber diferencias menores en casos edge: step en slices (`[0:10:2]`), filtros complejos con funciones (`length()`, `match()`), o scripts de expresiones. Para producción, usa la librería del lenguaje de tu backend.