2014-09-11 2 views
1

Я использую SQLingvo и clojure.jdbc для доступа к базе данных PostgreSQL.Hyphenating underscored Clojure карты ключей для результатов базы данных

Данные возвращаются как подчеркнутые карты, например. {:created_at "some date"}, когда я ожидаю, что дефисные ключевые слова, такие как :created-at. Есть ли простой способ перенаправить эти карты обратно в их переносимые версии?

ответ

2

Я использовал 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

Смежные вопросы