jsonclojuretransit

How to write some transit-clj in a file and how to retrieve the data structure from this file


Say I have:

(def c [{:id 12 :name "John"}])

How do I write this in a file?

How do I get back this data structure?


Solution

  • A not perfect solution that works:

    (require '[clojure.java.io :as io]
             '[cognitect.transit :as t])
    
    (def c [{:id 12 :name "John"}])
    
    (def dir "resources/json/")
    
    (defn write-transit [dir file-name file-type coll]
      (let [suffix {:json ".json" :json-verbose ".verbose.json" :msgpack ".mp"}]
        (with-open [out (io/output-stream 
                          (str dir "/" file-name (file-type suffix)))]
            (t/write (t/writer out file-type) coll)))))
    
    (defn read-transit [dir file-name file-type]
      (let [suffix {:json ".json" :json-verbose ".verbose.json" :msgpack ".mp"}]
        (with-open [in (io/input-stream (str dir "/" file-name (file-type suffix)))]
          (t/read (t/reader in file-type)))))
    
    (write-transit dir "test" :json c)
    ;=> nil
    
    (read-transit dir "test" :json)
    ;=> [{:id 12 :name "John"}]