【发布时间】:2021-04-15 17:02:36
【问题描述】:
我正在创建一个包含多个类别的架构。在每个类别中都有一个键值对数组。每个键代表值的显示名称。每个值都是唯一的,并且只能分配给单个键和类别。
例如,名为“灵长类动物”的类别将“人类”作为键/显示名称之一,生物学名称“智人”将是键值对的对应值。
我想验证数据输入,以便数据仅与键/显示名称之一匹配。我把anyOf 放在类别中,它做同样的工作吗?这是您在架构中排列项目的方式吗?
{
"$schema": "https://example.com/schema/dictionary",
"$id": "https://example.com/schemaoutput/dictionary",
"description": "A schema that validates the minimum requirements for validation output",
"type": "array",
"items": {
"additionalProperties": false,
"properties": {
"subcat1": {
"type": "string",
"title": "category1",
"tag": [
{
"display_labelA": [
"class_A"
],
"display_labelB": [
"class_B"
]
}
]
},
"subcat2": {
"type": "string",
"title": "category2",
"tag": [
{
"display_labelC": [
"class_C"
],
"display_labelD": [
"class_D"
]
}
]
}
},
"anyOf": [
{
"required": [
"subcat1",
"subcat2"
]
}
]
}
}
编辑:
根据要求,我用预期的通过和失败场景更新了帖子。例如,我想创建一个 json 模式,其中包含动物王国中不同类别的动物。每个键:值对指的是众所周知的动物名称和相应的学名。仅接受动物众所周知的名称的数据条目。
通过场景:
- 将接受“人类”数据条目,因为它是“灵长类动物”类别的键:值对(人类:智人)之一。
- “黑猩猩”数据条目也将被接受。它也是“灵长类动物”类别的键值对(黑猩猩:pan troglodytes)之一。
- 将接受数据输入“鲑鱼”。它的键值对(Salmon: Salmo salar Linnaeus)位于另一个类别“鱼”中。
失败场景:
- 任何未在动物王国字典中列出的数据条目将不被接受,例如梨、橙子、桌子、椅子……
【问题讨论】:
-
我不太关注这个。您能否提供一些示例 JSON 实例来显示应该通过的案例和应该失败的案例?
-
@JasonDesrosiers 抱歉,不清楚,我想当我写这个问题时我被蒙蔽了,因为我对此还很陌生。我更新了一些预期的通过和失败场景。
-
恐怕这仍然没有意义。我怀疑您正试图让 JSON Schema 做一些 JSON Schema 没有做的事情。您有一个描述一组类别的模式。您可以使用该模式来验证类别数组的结构是否正确。您似乎想验证一个字符串(例如“human”)是否在类别数组中。您实际上想以某种方式验证实例,而不是模式。这是我对您正在尝试做的事情的最佳理解。
-
@JasonDesrosiers 是的,您怀疑是我想做的事情 - 验证定义的字典中存在的字符串。我知道 json 模式可以为验证设置数值范围和数据类型,但在我的情况下,我想验证字符串数据输入。我开始思考这个问题是否在链接中放入了我需要的东西? stackoverflow.com/questions/57076320/…
-
我在这里添加了答案 - json 结构是有效的,但很想知道这是否合乎逻辑/您的想法@JasonDesrosiers
标签: json validation jsonschema json-schema-validator