我正在使用 SQLingvo和 clojure.jdbc访问 PostgreSQL 数据库。
数据以带下划线的 map 形式返回,例如{:created_at "some date"}
,当我期望像 :created-at
这样的带连字符的关键字时。有没有一种简单的方法可以将这些 map 编码回它们的连字符版本?
最佳答案
我使用 clojure.walk/postwalk
来完成这个。
(defn transform-keys
"Recursively transforms all map keys in coll with the transform-key fn."
[transform-key coll]
(letfn [(transform [x] (if (map? x)
(into {} (map (fn [[k v]] [(transform-key k) v]) x))
x))]
(walk/postwalk transform coll)))
第一个参数是一个函数,它接受现有 key 并返回新 key 。在您的情况下,您可以将关键字转换为字符串,将下划线替换为连字符,然后将其转换回关键字。
关于database - 为数据库结果连字符带下划线的 Clojure 映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25787001/