首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Clojure中转换映射的键

在Clojure中转换映射的键
EN

Stack Overflow用户
提问于 2014-01-31 14:57:09
回答 3查看 1.8K关注 0票数 3

我正在使用REST,它使用以下JSON表示一个帐户:

代码语言:javascript
复制
{ "userName": "foo", "password": "bar", "emailId": "baz" }

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

代码语言:javascript
复制
(create-account :username "foo" :password "bar" :email "baz")

我想要做的是将create-account获得的漂亮键映射到REST所期望的时髦键上。我目前的解决办法是:

代码语言:javascript
复制
(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

有什么更惯用的方法来完成这个任务吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-31 15:54:03

代码语言:javascript
复制
(clojure.set/rename-keys args clj->rest)

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

代码语言:javascript
复制
{:emailId "baz", :userName "foo", :password "bar"}

我想您已经想出了如何将其转换为所需的JSON。

票数 12
EN

Stack Overflow用户

发布于 2014-01-31 15:23:11

您可以编写一个简单的帮助函数来用给定的映射函数映射所有键:

代码语言:javascript
复制
(defn kmap [f m]
  (into {} (map #(update-in % [0] f) m)))

因此,现在您可以轻松地映射您的论点:

代码语言:javascript
复制
(def clj->rest {:username :userName
                :password :password
                :email :emailId})

(kmap clj->rest args)
票数 4
EN

Stack Overflow用户

发布于 2014-01-31 15:37:45

看起来不错,只需将(apply hash-map (flatten ...更改为(into {} ...以获得更多的惯用代码即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21483044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档