Clojure:将字符串转换为映射

4
你知道一个函数,可以将Clojure字符串转换为映射吗?例如,如果该函数获取字符串

:first "John" :last "Lukas" :city "London"

它将返回一个带有先前键值关系的映射。
1个回答

7
您可以使用clojure.end/read-string函数完成此操作。它确保没有人将代码注入您的系统,但仍会解析clojure数据结构。在其前面添加“{”,并在其后添加“}”以使其成为可按此方式解析的映射:
(def stringtoparse ":first \"John\" :last \"Lukas\" :city \"London\"") 

(clojure.edn/read-string (str "{" stringtoparse "}"))

当我使用模块clojure.edn时,出现了一个错误:ClassNotFoundException clojure.edn java.net.URLClassLoader.findClass (URLClassLoader.java:381)我使用的是Clojure 1.7版本。这个模块只存在于Clojure 1.8吗?有没有办法在1.7版本中使用它? - CrazySynthax
你在使用哪个版本的clojure?自Clojure 1.5以来,clojure.edn命名空间已经存在。 - Matthias Wimmer
4
这是在Clojure语言中的clojure.core库中的read-string方法,你不应该使用它,原因可以在这里[http://clojuredocs.org/clojure.core/read-string]和[http://clojuredocs.org/clojure.core/read]找到。请注意不要更改原意。 - Sam Estep
1
@Mattias Wimmer,在输入clojure.edn/read-string之前,我执行了以下操作: (require '[clojure.edn]) 然后它通过了。 - CrazySynthax
1
如果你正在使用read-string,那么你的应用程序存在安全漏洞,可能被黑客攻击。@Elogent在这里完全正确,这非常重要。如果你因为相信"特殊标志"被设置为false而忽略了这个问题,并在生产环境中运行它,那么未来某个时候你将随机遭受安全漏洞。 - Arthur Ulfeldt
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接