【问题标题】:Hyphenating underscored Clojure map keys for database results为数据库结果连接带下划线的 Clojure 映射键
【发布时间】:2014-09-11 12:04:19
【问题描述】:

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

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

【问题讨论】:

    标签: database map clojure hyphenation


    【解决方案1】:

    我使用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

    【讨论】:

    • 现在也值得一看 Specter,作者是 Nathan Marz。
    • 请注意,这与clojure.walk/keywordize-keys非常相似,您可以将其作为灵感。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      • 2020-11-15
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多