这怎么可能是 JSON 架构
How can this be a JSON Schema
我正在尝试验证 JSON 架构实际上是一个 JSON 架构,而不是一个实例,正如我所读,该资源是针对元架构进行验证的,例如:
- 核心验证元模式(http://json-schema.org/draft/2019-09/schema)
- 旧版本元架构(https://json-schema.org/draft-04/schema)
我已经尝试使用不同的验证库,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 呢?
这取决于您要将术语定义的范围缩小多少。
- 您可以强制顶层需要定义特定的
$schema
版本。
- 您可以强制要求至少在顶层有一个有效的
type
属性。
- 如果您知道那些 JSON 架构来自哪里并且它们没有利用这种可扩展性,您可以操纵您的目标元 JSON 架构并将
”additionalProperties”: false
作为触发验证之前的顶级 属性。
我正在尝试验证 JSON 架构实际上是一个 JSON 架构,而不是一个实例,正如我所读,该资源是针对元架构进行验证的,例如:
- 核心验证元模式(http://json-schema.org/draft/2019-09/schema)
- 旧版本元架构(https://json-schema.org/draft-04/schema)
我已经尝试使用不同的验证库,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 呢? 这取决于您要将术语定义的范围缩小多少。
- 您可以强制顶层需要定义特定的
$schema
版本。 - 您可以强制要求至少在顶层有一个有效的
type
属性。 - 如果您知道那些 JSON 架构来自哪里并且它们没有利用这种可扩展性,您可以操纵您的目标元 JSON 架构并将
”additionalProperties”: false
作为触发验证之前的顶级 属性。