在Clojure中转换映射的键
我正在使用一个REST API,该API表示具有以下JSON的帐户:在Clojure中转换映射的键,clojure,Clojure,我正在使用一个REST API,该API表示具有以下JSON的帐户: { "userName": "foo", "password": "bar", "emailId": "baz" } 我有一个Clojure函数来创建一个可以这样调用的帐户: (create-account :username "foo" :password "bar" :email "baz") 我想做的是将create account所使用的漂亮键映射到restapi所期望的时髦键。我目前的解决方案是: (def cl
{ "userName": "foo", "password": "bar", "emailId": "baz" }
我有一个Clojure函数来创建一个可以这样调用的帐户:
(create-account :username "foo" :password "bar" :email "baz")
我想做的是将create account
所使用的漂亮键映射到restapi所期望的时髦键。我目前的解决方案是:
(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
有没有更惯用的方法来实现这一点?您可以编写一个简单的帮助函数,用给定的映射函数映射所有键:
(defn kmap [f m]
(into {} (map #(update-in % [0] f) m)))
因此,现在您可以轻松地映射您的参数:
(def clj->rest {:username :userName
:password :password
:email :emailId})
(kmap clj->rest args)
看起来不错,只需将
(应用哈希映射(展平…
)更改为(转换为{}…
)即可获得更多惯用代码
(clojure.set/rename-keys args clj->rest)
…模仿您的解决方案,生成
{:emailId "baz", :userName "foo", :password "bar"}
我想您已经找到了如何将其转换为所需的JSON。太棒了,谢谢!是的,JSON没有问题;我可以使用
clojure.data.JSON/write str
,或者只使用clj http中的{:form params{…}:content type:JSON}
内容。