2024 Clojure 状态调查! 中分享您的想法。

欢迎!请访问关于页面了解有关此内容的一些更多信息。

0
规范

JSON 是一种常用的数据格式,尤其在与非 Clojure 系统交互时。JSON 对象中的所有键都是字符串(不是 Clojure 中常见的关键字)。

希望能够验证传入的 JSON 数据,并在数据格式不正确时提供有用的错误消息。Spec 是这两个功能的优秀工具,但 s/keys 仅支持关键字键。

能够指定字符串键将是非常有用的,例如,对于一些如下的 JSON 数据:

{"city" "Denver", "state" "CO"}

我想编写一个如下的 spec:

(s/def :location/city string?) (s/def :location/state string?) (s/keys :req-str [:location/city :location/state])

其中 :req-str 犹如 :req,而 :req-un-str 就像 :req-un。这些 spec 仍然是完全限定的关键字。

当前的解决方案

  1. 使用 clojure.walk/keywordize-keys 将字符串键转换为关键字键。
  2. 用 spec 验证。
  3. 如果有问题,遍历这些问题并对每个值使用 stringify-keys
  4. 适当格式化问题(基本上,复制 explain 的格式)。

这个解决方案并非特别困难,但由于我怀疑与 JSON 的交互是一个常见的用例,因此可能更有益于更直接地支持此用例。

1个答案

0
参考: https://clojure.atlassian.net/browse/CLJ-2196(由 bbrinck 报告)
...