Clojure 命名空间关键字使JSON规范无效

Clojure 命名空间关键字使JSON规范无效,clojure,clojure.spec,Clojure,Clojure.spec,我正在使用Clojure.spec验证JSON的结构(稍后将其整合为另一种格式): (此处s指的是clojure.spec命名空间和json到clojure.data.json) 如上所示,s/valid?对于已解析的JSON失败,因为关键字没有名称空间 如何调整代码以使JSON有效?您可以执行以下操作: (def my-json (json/read-str "{\"yes\": \"yes\"}" :key-fn #(keyword (str *ns*) %))) 我不确定这是否是正确的/

我正在使用Clojure.spec验证JSON的结构(稍后将其整合为另一种格式):

(此处
s
指的是
clojure.spec
命名空间和
json
clojure.data.json

如上所示,
s/valid?
对于已解析的JSON失败,因为关键字没有名称空间


如何调整代码以使JSON有效?

您可以执行以下操作:

(def my-json (json/read-str "{\"yes\": \"yes\"}" :key-fn #(keyword (str *ns*) %)))

我不确定这是否是正确的/惯用的处理方法-我想这取决于具体情况。

您可以使用
:req un
而不是
:req
,但它将打破第二种情况,除非您将其更改为
{:yes“yes”}
@kongore谢谢。这是惯用的方法吗?我找到了另一种附加名称空间的方法:使用
#(关键字(str“my.namespace/”(clojure.string/replace(str%)”:“”))映射键
。我想情况更糟:)。谢谢。使用
unreq
似乎忽略了已定义的规范(我想只查看键)。您的解决方案确实使用了前面定义的规格!现在我用它。
(def my-json (json/read-str "{\"yes\": \"yes\"}" :key-fn #(keyword (str *ns*) %)))