如何在clojure中从JSON映射构造中检测重复键

时间:2016-05-24 20:27:29

标签: json clojure

我正在使用http://clojure.github.io/data.json/ read-str来阅读招摇(https://openapis.org/specification) 用于语义验证的文档。要验证的一件事是没有重复的路径。 例如:

/foo/{bar}/baz

是重复的:

/foo/{dup}/baz

但是,如果swagger文件包含两个“文字”相同的路径:

/foo/bar/baz : ...
...
/foo/bar/baz : ...

当我使用read-str时,最后一个“覆盖”第一个,所以我看不到 副本 - 它刚刚被删除。

有没有办法使用clojure.data.json投诉重复的密钥?

或者我可以使用其他库吗?

1 个答案:

答案 0 :(得分:1)

不幸的是,没有。该库不提供开箱即用的挂钩。它允许您添加挂钩以单独验证各个键和各个值,而不是在它可以判断键是否已经在映射中的上下文中。它只是调用assoc,因此默认情况下会获得Clojure行为。

(assoc! result out-key out-value)

您可以从该项目中的json.clj复制read-object函数,并将验证器添加到result瞬态映射中。但这会很脆弱。