【问题标题】:Validating correctness of $ref in json schema在 json 模式中验证 $ref 的正确性
【发布时间】:2018-02-28 10:57:51
【问题描述】:

要求是验证给定的 json 架构没有悬空的 $ref 指向文件中的定义。

{
  "$schema": "http://json-schema.org/draft-6/schema#",

  "definitions": {
    "date": {
      "type": "string",
      "pattern": "^(0?[1-9]|[12][0-9]|3[01])\\-(0?[1-9]|1[012])\\-\\d{4}$"
    },
   },
   "properties": {
     "my_date": {"$ref": "#/definitions/dat"}
   }
}

这里,参考中有一个错字(dat 而不是 date)。我想捕获这样的实例而不是运行时失败。

正在使用的库:https://github.com/java-json-tools/json-schema-validator

【问题讨论】:

  • 为什么不想尝试捕获并处理错误?
  • 问题是它直到运行时才抛出任何异常。如果有人更改了架构并且有错字而不是在生产中失败,我想检测它。
  • 听起来您想为您的应用程序编写一些测试。确认 JSON Schema 的测试会按预期验证某些特定的测试 json。

标签: jsonschema json-schema-validator


【解决方案1】:

您可以通过消化 JSON、递归提取 $ref 的值、在斜杠上拆分以及检查路径是否存在来验证 $ref 的使用是否已解决。

这可能会变得更复杂,因为您可能有指向 URL 的外部引用。

我不会给你任何代码,因为我不懂 JAVA。使用该库似乎没有您想要的东西。

【讨论】:

  • 这是最后的手段。我希望库应该提供这种类型的东西,因为它是一个非常常见的用例。
  • @AbhayDubey 实际上用例并不常见。 JSON Schema 有很多方法可以编写废话。由模式的作者来确保他们按预期编写了它。为什么您希望该库也对您的架构进行 lint?
  • 是的,作者需要确保架构编写正确,但是在更改架构时仍然可以处理诸如拼写错误之类的问题,而不是在生产中出现问题。我明白你的意思,我们可以有自定义代码来处理它。
猜你喜欢
  • 2012-09-22
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-11
相关资源
最近更新 更多