Как записать некоторый транзит-clj в файл и как извлечь структуру данных из этого файла
Скажи, что у меня есть:
(def c [{:id 12 :name "John"}])
Как мне написать это в файле?
Как мне вернуть эту структуру данных?
2 ответа
Решение
Не идеальное решение, которое работает:
(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"}]
Посмотрите на код в документе, чтобы прочитать, особенно в нижней части. Есть полный пример того, что вы ищете.