如果您想要重命名所有:desc
鍵,而不管它們位於哪一級別的嵌套,這可能會起作用。如果您只想在某個嵌套級別重命名:desc
鍵,則需要稍微複雜一些。
這隻適用於因爲clojure.set/rename-keys
目前什麼都不做(返回它的第一個參數不變),如果它的第一個參數不是地圖。
user> (require '[clojure [set :as set] [walk :as walk]])
nil
user> (def x {:data1
{:categories
[{:desc "whatever", :name "abc", :id 234}
{:desc "nothing", :name "def", :id 456}]},
:data2
{:categories
[{:desc "whatever", :name "abc", :id 234}
{:desc "nothing", :name "def", :id 456}]}})
#'user/x
user> (walk/postwalk #(set/rename-keys % {:desc :description :id :ID}) x)
{:data1
{:categories
[{:name "abc", :ID 234, :description "whatever"}
{:name "def", :ID 456, :description "nothing"}]},
:data2
{:categories
[{:name "abc", :ID 234, :description "whatever"}
{:name "def", :ID 456, :description "nothing"}]}}
nil
哇...超酷 –