我正在使用代表具有以下JSON的帐户的REST API:
{ "userName": "foo", "password": "bar", "emailId": "baz" }
我有一个Clojure函数来创建一个可以这样调用的帐户:
(create-account :username "foo" :password "bar" :email "baz")
我想要做的是将create-account
带来的漂亮密钥映射到REST API期望的时髦密钥。我目前的解决方案是:
(def clj->rest {:username :userName
:email :emailId})
(apply hash-map
(flatten (map
(fn [[k v]] [(or (clj->rest k) k) v])
args))) ;; args is the arguments to create-account, as above
有没有更惯用的方法来实现这个目标?
答案 0 :(得分:9)
(clojure.set/rename-keys args clj->rest)
...模仿你的解决方案,产生......
{:emailId "baz", :userName "foo", :password "bar"}
我认为你已经找到了如何将其更改为所需的JSON。
答案 1 :(得分:2)
您可以编写一个简单的辅助函数来映射具有给定映射函数的所有键:
(defn kmap [f m]
(into {} (map #(update-in % [0] f) m)))
所以,现在你将能够轻松地映射你的论点:
(def clj->rest {:username :userName
:password :password
:email :emailId})
(kmap clj->rest args)
答案 2 :(得分:1)
看起来不错,只需将(apply hash-map (flatten ...
更改为(into {} ...
即可获得更多惯用代码。