【问题标题】:validate nested content of json schema验证 json 模式的嵌套内容
【发布时间】: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 模式,其中包含动物王国中不同类别的动物。每个键:值对指的是众所周知的动物名称和相应的学名。仅接受动物众所周知的名称的数据条目。

通过场景:

  1. 将接受“人类”数据条目,因为它是“灵长类动物”类别的键:值对(人类:智人)之一。
  1. “黑猩猩”数据条目也将被接受。它也是“灵长类动物”类别的键值对(黑猩猩:pan troglodytes)之一。
  2. 将接受数据输入“鲑鱼”。它的键值对(Salmon: Salmo salar Linnaeus)位于另一个类别“鱼”中。

失败场景:

  1. 任何未在动物王国字典中列出的数据条目将不被接受,例如梨、橙子、桌子、椅子……

【问题讨论】:

  • 我不太关注这个。您能否提供一些示例 JSON 实例来显示应该通过的案例和应该失败的案例?
  • @JasonDesrosiers 抱歉,不清楚,我想当我写这个问题时我被蒙蔽了,因为我对此还很陌生。我更新了一些预期的通过和失败场景。
  • 恐怕这仍然没有意义。我怀疑您正试图让 JSON Schema 做一些 JSON Schema 没有做的事情。您有一个描述一组类别的模式。您可以使用该模式来验证类别数组的结构是否正确。您似乎想验证一个字符串(例如“human”)是否在类别数组中。您实际上想以某种方式验证实例,而不是模式。这是我对您正在尝试做的事情的最佳理解。
  • @JasonDesrosiers 是的,您怀疑是我想做的事情 - 验证定义的字典中存在的字符串。我知道 json 模式可以为验证设置数值范围和数据类型,但在我的情况下,我想验证字符串数据输入。我开始思考这个问题是否在链接中放入了我需要的东西? stackoverflow.com/questions/57076320/…
  • 我在这里添加了答案 - json 结构是有效的,但很想知道这是否合乎逻辑/您的想法@JasonDesrosiers

标签: json validation jsonschema json-schema-validator


【解决方案1】:

浏览1 和其他帖子,我认为enum 是我需要在每个类别(灵长类动物或鱼类)下映射键:值对(即生物学名称:众所周知的名称)。我在 JSON 模式的末尾使用 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",
                "enum": [{
                    "display_labelA": "class_A",
                    "display_labelB": "class_B"
                }]
            },
            "subcat2": {
                "type": "string",
                "title": "category2",
                "enum": [{
                    "display_labelA": "class_A",
                    "display_labelB": "class_B"
                }]
            }
        },
        "anyOf": [{
            "required": [
                "subcat1",
                "subcat2"
            ]
        }]
    }
}

【讨论】:

    猜你喜欢
    • 2018-12-24
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多