【发布时间】:2022-12-17 08:00:37
【问题描述】:
我试图在我的 JSON 架构中重用枚举来定义对象的属性。
我想知道以下是否正确。
JSON模式
{
"type": "object",
"propertyNames": {
"enum": ["Foo","Bar"]
},
"patternProperties": {
".*": {
"type": "number"
}
}
}
JSON数据
{
"Foo": 123,
"Bar": 456
}
我问的原因是我从 JSON 模式验证库中得到不一致的结果。一些表示 JSON 有效,而另一些表示 JSON 无效。
附:如果有人想知道“为什么”我试图用枚举定义属性,那是因为枚举在我的 json 模式的各个部分共享。在某些情况下,它是对字符串的约束,但我需要在这些字符串属性和对象属性上使用相同的一组可能值。作为枚举,我可以在一个地方维护一组可能的值。
【问题讨论】:
-
文档说
propertyNames中允许任何模式,type隐式设置为string。所以我认为你的方法是正确的。你能分享哪些验证器失败了吗?propertyNames仅随草案 6 一起提供,所以也许您的一些验证者还不支持它? -
Ajv 因上面的确切模式而失败。但奇怪的是,一个使用类似模式的更复杂的模式,唯一的区别是枚举是一个 $ref。我试过的几个在线 JSON Schema 验证器也失败了。
-
我快速完成了一个示例
$ref: jsonschemavalidator.net example ,它按预期工作。您能否将带有$ref的失败示例添加到您的问题中> -
您的 JSON 模式有效且正确。 “失败”是什么意思?我想知道“严格模式”是否在这里引起了问题。
-
Ajv 确实有效,我用错了 API。我将不得不找到失败的特定验证器并分享它们。
标签: json jsonschema