我有以下哈希映射集合:
{a:"Completed" b:1 c:"Friday" d:4}
{a:"Started" b:1 c:"Monday" d:4}
{a:"In Progress" b:1 c:"Sunday" d:1}
{a:"Completed" b:3 c:"Tuesday" d:9}
Run Code Online (Sandbox Code Playgroud)
如何在clojure中将其转换为CSV文件?
即
a,b,c,d
Completed,1,Friday,4
Started,1,Monday,4
In Progress,1,Sunday,1
Completed,3,Tuesday,9
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将非常感激.
Bob*_*ton 15
你没有明确表示你是从JSON开始的,但让我们假设你是.我会使用cheshire
来解析你的JSON字符串,在这种情况下,是一个代表你数据的地图矢量.为了简单起见,我们假设您已经这样做了,只需使用var被调用data来避免使示例混乱.
现在我们可以创建一个向量向量,然后使用 clojure.data.csv将结果保存到文件中.
您可以使用lein try在REPL中尝试这一点.按照设置说明进行操作,lein try如果还没有,请运行
lein try clojure.data.csv 0.1.2.一旦你在这个依赖的REPL中:
(require '[clojure.data.csv :as csv] '[clojure.java.io :as io])
(def data
[{:a "Completed" :b 1 :c "Friday" :d 4}
{:a "Started" :b 1 :c "Monday" :d 4}
{:a "In Progress" :b 1 :c "Sunday" :d 1}
{:a "Completed" :b 3 :c "Tuesday" :d 9}])
(defn write-csv [path row-data]
(let [columns [:a :b :c :d]
headers (map name columns)
rows (mapv #(mapv % columns) row-data)]
(with-open [file (io/writer path)]
(csv/write-csv file (cons headers rows)))))
(write-csv "/tmp/results.csv" data)
Run Code Online (Sandbox Code Playgroud)
现在您可以看到您的手工结果:
$ cat /tmp/results.csv
a,b,c,d
Completed,1,Friday,4
Started,1,Monday,4
In Progress,1,Sunday,1
Completed,3,Tuesday,9
Run Code Online (Sandbox Code Playgroud)