JSONPath: El XPath que necesitábamos para JSON

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 los price 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 strings
  • match() - Expresiones regulares completas
  • search() - Buscar substring
  • count() - 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:

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:

  1. Procesas respuestas de APIs complejas donde necesitas extraer datos específicos
  2. Trabajas con configuraciones anidadas que cambian frecuentemente
  3. Analizas logs en formato JSON donde buscas patrones específicos
  4. 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

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.

Relacionados