如何从 Array 转换为 Hashmap

How to convert from Array to Hashmap

我有一个字符串:

{:id 1, :name "Ab Bc Cd", :sex "M", :birth "01.01.1999", :address "Street 1", :oms "0001"}

我需要将它转换为 HashMap 但是

(hash-map my-str)

returns{} 所以我把它分开了:

(s/split my-str ",")

它returns

[:id 1  :name "Ab Bc Cd"  :sex "M"  :birth "01.01.1999"  :address "Street 1"  :oms "0001"]

然后

for [x my-arr]
(hash-map x)

returns

({} {} {} {} {} {})

我该怎么做?

如果你有意得到这个字符串,那么使用

clojure.edn/read-string

例如

user=> (require 'clojure.edn)
nil
user=> (clojure.edn/read-string (slurp "x.edn"))
{:id 1, :name "Ab Bc Cd", :sex "M", :birth "01.01.1999", :address "Street 1", :oms "0001"}

您的示例就快完成了!

你可以通过调用

来完成它
(into {} your-result-so-far)

into 出现了很多你养成了寻找它的习惯。

最短的方法是 clojure.coreread-string - 它 read 来自字符串并执行构建对象的命令:

(def s "{:id 1, :name \"Ab Bc Cd\", :sex \"M\", :birth \"01.01.1999\", :address \"Street 1\", :oms \"0001\"}")
(read-string s)
;; => {:id 1, :name "Ab Bc Cd", :sex "M", :birth "01.01.1999", :address "Street 1", :oms "0001"}

文档说:

Reads one object from the string s. Optionally include reader options, as specified in read. Note that read-string can execute code (controlled by read-eval), and as such should be used only with trusted sources. For data structure interop use clojure.edn/read-string