JSONPath: El XPath que necesitábamos para JSON
4 min de lectura

JSONPath: El XPath que necesitábamos para JSON

821 palabras

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.

Comentarios

Últimas Entradas

4 min

793 palabras

I’ve seen how certain standards and tools become indispensable when working with data. And if there’s one thing we’ve learned over these years, it’s that JSON is everywhere: APIs, logs, configurations, NoSQL databases… The question is no longer whether you’ll work with JSON, but when you’ll face that 15-level nested structure that makes you sigh.

The Problem We’ve All Lived Through

How many times have you had to write something like this?

5 min

893 palabras

En mi experiencia con desarrollo móvil, he visto cómo las apps se vuelven cada vez más complejas y los proyectos crecen sin control. Recuerdo perfectamente esa sensación de tener miles de líneas de código y no estar seguro de qué se estaba usando realmente y qué no.

Por eso me ha llamado tanto la atención esta herramienta que ha liberado Sentry (que antes era de Emerge Tools): Reaper. Un SDK de código abierto que hace algo que suena simple pero es tremendamente útil: encontrar código muerto en tus aplicaciones móviles.

5 min

1048 palabras

Llevo meses usando Claude Code a diario y hay una configuración que ha cambiado por completo cómo trabaja con mi código. No es un plugin nuevo, ni un modelo más potente, ni un prompt mágico. Es algo que existe desde 2016 y que la mayoría de desarrolladores usamos sin saberlo cada vez que abrimos VS Code: el Language Server Protocol (LSP).

Karan Bansal publicó un artículo excelente explicando en detalle cómo activar LSP en Claude Code y por qué importa. Después de probarlo, puedo confirmar que la diferencia es real y significativa.

5 min

955 palabras

A lo largo de mi carrera he visto cambiar muchas cosas. He pasado de Borland a Visual Studio, de vi a Sublime Text, de Sublime a VS Code… Y créeme, cada cambio fue una decisión meditada que me costó semanas de adaptación. Pero lo que está pasando ahora con las herramientas de IA es algo completamente diferente.

Me he encontrado usando Copilot por la mañana, probando Cursor por la tarde, y echando un vistazo a Claude Code antes de irme a dormir. Y no soy el único. Los desarrolladores hemos pasado de ser fieles como perros a nuestras herramientas a ser… bueno, promiscuos.