clojure – 将哈希映射的集合转换为csv文件

我有以下哈希映射集合:

{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}

如何在clojure中将其转换为CSV文件?

a,b,c,d
Completed,1,Friday,4
Started,1,Monday,4
In Progress,1,Sunday,1
Completed,3,Tuesday,9

任何有关这方面的帮助将非常感激.

最佳答案
你没有明确表示你是从JSON开始的,但让我们假设你是.
我会用cheshire
解析你的JSON字符串,在这种情况下,获得一个地图矢量
代表你的数据.我们假设你已经为了清酒而这样做了
简单,只需使用一个称为数据的var来避免
混乱的例子.

现在我们可以创建一个向量向量,然后使用
clojure.data.csv保存
结果到一个文件.

你可以使用lein try在REPL上试一试.
如果您还没有lein尝试,请按照设置说明进行操作,然后运行
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)

现在您可以看到您的手工结果:

$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

转载注明原文:clojure – 将哈希映射的集合转换为csv文件 - 代码日志