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

欢迎!有关如何工作的更多信息,请参阅关于页面。

0 投票
规范

JSON是一种常用的数据格式,特别是当与非Clojure系统接口时。JSON对象中所有键都是字符串(而不是关键字,这是Clojure中常见的)。

能够验证传入的JSON数据,并在数据格式不良时提供有用的错误信息很有用。Spec是完成这两项任务都很好的工具,但`s/keys`只适用于关键字键。

能够指定字符串键将是有用的,例如,给定一些JSON数据,如

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

我想编写一个规范如下

(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一样。这些规范仍然是完全限定的关键字。

当前的解决方案

  1. 使用clojure.walk/keywordize-keys将字符串键转换为关键字键
  2. 通过规范进行验证
  3. 如果有问题,遍历问题并使用每个val的stringify-keys
  4. 适当地格式化问题(基本上,重现explain的格式化)。

这个解决方案并不特别困难,但由于我怀疑处理JSON是一个常见的用例,可能更有用直接支持这种用例。

1 答案

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