在Clojure中转换地图的键

Jos*_*ver 1 clojure

我正在使用REST API来表示具有以下JSON的帐户:

{ "userName": "foo", "password": "bar", "emailId": "baz" }
Run Code Online (Sandbox Code Playgroud)

我有一个Clojure函数来创建一个可以这样调用的帐户:

(create-account :username "foo" :password "bar" :email "baz")
Run Code Online (Sandbox Code Playgroud)

我想要做的是将好的密钥映射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
Run Code Online (Sandbox Code Playgroud)

有没有更惯用的方法来实现这一目标?

Thu*_*ail 9

(clojure.set/rename-keys args clj->rest)
Run Code Online (Sandbox Code Playgroud)

...模仿你的解决方案,产生......

{:emailId "baz", :userName "foo", :password "bar"}
Run Code Online (Sandbox Code Playgroud)

我认为你已经找到了如何将其更改为所需的JSON.