Cómo leer JSON en Clojure – clojure.data.json vs Cheshire

Trabajar con JSON es una tarea común en el desarrollo de aplicaciones, y en Clojure, existen varias bibliotecas disponibles para manejar JSON. Las dos opciones más populares son clojure.data.json y cheshire. En este artículo, exploraremos cómo leer JSON con ambas y compararemos sus características.

1. Leer JSON con cheshire

La biblioteca cheshire es una de las más utilizadas en la comunidad de Clojure debido a su rapidez y flexibilidad. Aquí tienes un ejemplo básico:

(require '[cheshire.core :as json])
(json/parse-string "{\"nombre\":\"María\",\"edad\":25}" true) ;; {:nombre "María", :edad 25}

El argumento true convierte automáticamente las claves de JSON en keywords de Clojure.

Para leer JSON desde un archivo, puedes usar:

(with-open [rdr (clojure.java.io/reader "ruta/al/archivo.json")]
(json/parse-stream rdr true)) ;; {:nombre "María", :edad 25}

2. Leer JSON con clojure.data.json

La biblioteca clojure.data.json, incluida en el ecosistema oficial de Clojure, también permite trabajar con JSON de manera sencilla. Aquí tienes un ejemplo básico:

(require '[clojure.data.json :as json])
(json/read-str "{\"nombre\":\"María\",\"edad\":25}" :key-fn keyword) ;; {:nombre "María", :edad 25}

El argumento :key-fn keyword convierte las claves de JSON en keywords de Clojure.

Para leer JSON desde un archivo:

(with-open [rdr (clojure.java.io/reader "ruta/al/archivo.json")]
(json/read rdr :key-fn keyword)) ;; {:nombre "María", :edad 25}

3. Comparativa entre cheshire y clojure.data.json

Ambas bibliotecas son útiles para trabajar con JSON, pero tienen diferencias importantes:

En resumen, cheshire es la mejor opción para la mayoría de los casos debido a su rendimiento y características avanzadas, mientras que clojure.data.json es adecuada para proyectos donde la simplicidad y la ausencia de dependencias externas son una prioridad.