He visto cómo ciertos estándares y herramientas se convierten en imprescindibles cuando trabajas con datos. Y si hay algo que hemos aprendido en estos años es que JSON está en todas partes: APIs, logs, configuraciones, bases de datos NoSQL… La pregunta ya no es si trabajarás con JSON, sino cuándo te enfrentarás a esa estructura anidada de 15 niveles que te hace suspirar.
El problema que todos hemos vivido
¿Cuántas veces has tenido que escribir algo como esto?
// El típico código que todos hemos escrito
const libro = datos.store.book[0];
const precio = libro ? libro.price : null;
const autor = libro && libro.authors ? libro.authors[0] : null;
O peor aún, esos bucles anidados para filtrar arrays dentro de objetos dentro de arrays. Es tedioso, propenso a errores y, francamente, poco elegante.
JSONPath: La solución que estábamos esperando
Hace poco me topé con este excelente artículo en PostPilot que explica JSONPath de manera muy clara. Y lo cierto es que me recordó algo fascinante: JSONPath acaba de convertirse en estándar oficial con la publicación del RFC 9535 en 2024.
¿Lo más curioso? Que han pasado 17 años desde que Stefan Gössner publicó su blog post original sobre JSONPath en 2007. Diecisiete años para que una idea brillante se convirtiera en estándar. Esto me recuerda por qué siempre digo que “por cada minuto que se dedique a su planteamiento y estudio se necesitarán 2 minutos menos de desarrollo”.
¿Qué es JSONPath realmente?
JSONPath es como XPath pero para JSON. Te permite hacer consultas declarativas sobre estructuras JSON complejas usando una sintaxis simple y expresiva.
En lugar de escribir código imperativo, simplemente describes qué datos quieres:
// En lugar de bucles complejos
const titulos = jp.query(datos, '$.store.book[*].title');
// ["El Guardián entre el Centeno", "Matar un Ruiseñor", "Sapiens"]
// Filtros con condiciones
const librosCaros = jp.query(datos, '$..book[?(@.price > 10)]');
// Búsquedas recursivas
const todosPreciosExistentes = jp.query(datos, '$..price');
Sintaxis práctica (la que realmente usas)
Después de años trabajando con diferentes tecnologías, he aprendido que lo importante no es memorizar toda la sintaxis, sino entender los patrones más útiles:
Los básicos imprescindibles:
$
- El nodo raíz (como/
en XPath)$.store.book
- Navegación por propiedades$.store.book[0]
- Acceso a elementos de array$.store.book[*]
- Todos los elementos de un array$..price
- Búsqueda recursiva (todos losprice
en cualquier nivel)
Los filtros que realmente usas:
$..book[?(@.price > 10)]
- Filtrar por condición$..book[?(@.isbn)]
- Filtrar por existencia de propiedad$..book[?(@.category=='fiction')]
- Filtrar por valor exacto
Las funciones útiles (RFC 9535):
length()
- Tamaño de arrays, objetos o stringsmatch()
- Expresiones regulares completassearch()
- Buscar substringcount()
- Contar elementos que coinciden
Herramientas que te harán la vida más fácil
Una de las cosas que más me gusta de JSONPath es el ecosistema de herramientas que han surgido alrededor. Aquí tienes algunas que recomiendo:
Playgrounds online:
- JSONPath.com - Simple y directo
- JSONPath Tester de Curious Concept - Múltiples implementaciones
- Mockoon JSONPath Evaluator - Con actualizaciones en tiempo real
- PostPilot.dev - El que menciona el artículo original
Implementaciones por lenguaje:
- JavaScript:
jsonpath
(npm) - Python:
jsonpath-ng
- Java:
com.jayway.jsonpath
- C#:
JsonPath.Net
- Go: Varias implementaciones RFC 9535 como jsonpath
- PHP: jsonpath-php con soporte RFC 9535
Mi experiencia práctica
En los últimos proyectos donde he trabajado con APIs complejas y datos estructurados, JSONPath me ha ahorrado horas de desarrollo. Es especialmente útil cuando:
- Procesas respuestas de APIs complejas donde necesitas extraer datos específicos
- Trabajas con configuraciones anidadas que cambian frecuentemente
- Analizas logs en formato JSON donde buscas patrones específicos
- Transformas datos antes de almacenarlos o enviarlos a otros sistemas
El futuro está aquí
Lo que me parece más interesante es que ahora, con el RFC 9535, tenemos por fin un estándar oficial. Esto significa que las implementaciones van a converger hacia una sintaxis común, lo que es una excelente noticia para la interoperabilidad.
Como siempre digo: “No existe la solución/tecnología buena para todo”, pero JSONPath definitivamente es una herramienta que debería estar en tu arsenal si trabajas con JSON de manera regular.
Recursos para profundizar
- RFC 9535 - JSONPath oficial
- Artículo original de PostPilot - Excelente explicación práctica
- JSONPath Comparison Project - Compara diferentes implementaciones
- Blog post histórico de Stefan Gössner - Donde todo comenzó en 2007
Conclusión personal
JSONPath es una de esas herramientas que, una vez que las incorporas a tu flujo de trabajo, te preguntas cómo pudiste vivir sin ella. Es elegante, potente y, ahora que es un estándar oficial, una apuesta segura para el futuro.
Como siempre, la mejor manera de aprender es practicando. Te recomiendo que pruebes algunos de los playgrounds online con tus propios datos JSON y veas cómo JSONPath puede simplificar tu código.
¿Ya has usado JSONPath en tus proyectos? ¿Qué casos de uso te han resultado más útiles? Me encantaría conocer tu experiencia.
¿Te ha resultado útil este artículo? Compártelo con otros desarrolladores que puedan beneficiarse de JSONPath. Y si tienes alguna pregunta o experiencia que compartir, no dudes en contactarme.