这怎么可能是 JSON 架构

How can this be a JSON Schema

我正在尝试验证 JSON 架构实际上是一个 JSON 架构,而不是一个实例,正如我所读,该资源是针对元架构进行验证的,例如:

我已经尝试使用不同的验证库,json-schema-validator for Java, and jsonschema 为 Python 提供更多保证,但我一直在获得一个有趣的断言,即这是一个有效的 JSON 架构实例。

{
    "hey" : {
        "you" : {
            "how" : {
                "dyd" : "Very well, ty"
            }
        }
    }
}

我来这里是因为很明显我有一些很大的误解或误解,因为我不明白如何将一个清晰的 JSON 实例(它声明没有数据类型)验证为 JSON 模式实例。

正如我在开头所说的那样,我想要解决的最初问题是如何验证 JSON 模式,但是如果任何 JSON 有效实例太有效 JSON模式(因为结果正在抛出),如何断言?

简短的回答是:JSON架构是为可扩展性而设计的。这意味着它允许添加任何类型的附加属性,只要它们不与 known/expected 关键字冲突。

在您的情况下,hey 属性 肯定不是已知关键字,即它在验证过程中被忽略了。这给您留下了允许任何类型的有效 JSON 模式 {}

如何确保某些东西实际上是 JSON Schema 呢? 这取决于您要将术语定义的范围缩小多少。

  1. 您可以强制顶层需要定义特定的 $schema 版本。
  2. 您可以强制要求至少在顶层有一个有效的 type 属性。
  3. 如果您知道那些 JSON 架构来自哪里并且它们没有利用这种可扩展性,您可以操纵您的目标元 JSON 架构并将 ”additionalProperties”: false 作为触发验证之前的顶级 属性。