2

我正在使用SQLingvoclojure.jdbc来访问 PostgreSQL 数据库。

数据作为带下划线的地图返回,例如{:created_at "some date"},当我期望像:created-at. 有没有一种简单的方法可以将这些地图编组回它们的连字符版本?

4

2 回答 2

4

我曾经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)))

第一个参数是一个函数,它接受现有的键并返回新的键。在您的情况下,您可以将关键字转换为字符串,用连字符替换下划线,然后将其转换回关键字。

https://gist.github.com/jeremyheiler/fe9256e540121e771285

于 2014-09-11T12:43:40.633 回答
1

进行查询时应该可以提供{:identifiers #(.replace % \_ \-)}in 选项,就像在clojure.java.jdbc.

于 2019-03-02T14:15:45.357 回答