EDN, JSON and Data Formats
;; EDN: Clojure's data format (a subset of Clojure syntax)
(require '[clojure.edn :as edn])
(edn/read-string "{:name \"Ana\" :tags #{:a :b} :created #inst \"2025-10-24\"}")
(pr-str {:a 1 :b [1 2]}) ; "{:a 1, :b [1 2]}": print as readable data
(edn/read-string (slurp "config.edn")) ; configuration files
;; Never use clojure.core/read-string on untrusted input (it can evaluate code via #=); use clojure.edn
;; Aero: EDN config with profiles, env vars, and references
;; {:port #long #or [#env PORT 8080] :db #profile {:dev "dev-db" :prod "prod-db"}}
;; JSON with clojure.data.json, cheshire, jsonista, or charred
(require '[clojure.data.json :as json])
(json/write-str {:name "Ana" :tags ["a" "b"]}) ; "{\"name\":\"Ana\",\"tags\":[\"a\",\"b\"]}"
(json/read-str "{\"name\":\"Ana\"}" :key-fn keyword) ; {:name "Ana"}
;; CSV
(require '[clojure.data.csv :as csv])
(with-open [r (io/reader "people.csv")]
(doall (csv/read-csv r))) ; vectors of strings
(with-open [w (io/writer "out.csv")]
(csv/write-csv w [["name" "age"] ["Ana" "30"]]))
;; Transit: efficient transfer of Clojure data between JVM and JS (cognitect/transit-clj)
;; YAML: clj-yaml; XML: cloju
…