如何验证包含MIXED类型对象的json模式数组?

约翰

我已经搜索过,还没有找到解决方案。

我想这样做的架构:

...
"bag": {
   "type": "array",
   "items": {
      "anyOf": [
         {"$ref": "#/definitions/obj1"},
         {"$ref": "#/definitions/obj2"},
         {"$ref": "#/definitions/obj3"}
      ]
   },
   "required": ["items"],
   "minItems": 1
}
...

使用已定义的对象:

...
"definitions": {
   "obj1": {
      "type": "object",
      "properties": {
         "obj1": {
            "type": "object",
            "properties": {
                "a": {
                   "type": "string"
                }
            },
            "required": ["a"]
         }
      }
   },
   "obj2": {
      "type": "object",
      "properties": {
         "obj1": {
            "type": "object",
            "properties": {
                "b": {
                   "type": "string"
                }
            },
            "required": ["b"]
         }
      }
   },
   "obj3": {
      "type": "object",
      "properties": {
         "obj1": {
            "type": "object",
            "properties": {
                "c": {
                   "type": "string"
                }
            },
            "required": ["c"]
         }
      }
   }
}
...

理想情况下,我想针对如下所示的架构进行验证:

...
"bag": [
   {
      "obj1": {"a": "test1"}
   },
   {
      "obj3": {"c": "test1"}
   }
]
...

在这种情况下,如果有人经过obj1obj3进入bag通过模式,obj1require属性aobj3require property c

我在实际执行此操作时遇到了麻烦,因为验证似乎无法正确执行。

有小费吗?提前致谢。

随意的

从您当前的模式和示例数据来看,我无法确切地说出您想要什么,而是进行有根据的猜测...

我怀疑您想使用oneOf而不是anyOf

anyOf 允许您匹配多个子方案,看起来您只想允许匹配子方案obj1、2或3。

这将帮助您调试问题,但这不是您始终通过验证的原因。

对于每个定义子模式,您需要添加"additionalProperties": false

这是关键:JSON模式是基于约束的,这意味着任何不受约束的内容都是允许的。

additionalProperties将对象的允许属性限制为properties(和patternProperties)中定义的属性

这是示例架构。您可以在这里看到它与您的实例一起工作:https : //jsonschema.dev/s/MjBUp

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "definitions": {
    "obj1": {
      "type": "object",
      "properties": {
        "obj1": {
          "type": "object",
          "properties": {
            "a": {
              "type": "string"
            }
          },
          "required": ["a"]
        }
      },
      "additionalProperties": false
    },
    "obj2": {
      "type": "object",
      "properties": {
        "obj1": {
          "type": "object",
          "properties": {
            "b": {
              "type": "string"
            }
          },
          "required": ["b"]
        }
      },
      "additionalProperties": false
    }
 },
  "type": "array",
  "items": {
    "anyOf": [
      {"$ref": "#/definitions/obj1"},
      {"$ref": "#/definitions/obj2"}
    ]
  },
  "required": ["items"],
  "minItems": 1
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用json模式验证数组json包含几个无序对象

来自分类Dev

JSON模式验证:验证对象数组

来自分类Dev

条件数组对象的JSON模式验证

来自分类Dev

用于对象数组的Python JSON模式验证

来自分类Dev

如何将包含不同数据类型的JSON数组反序列化为单个对象

来自分类Dev

如何验证JSON对象中的JSON对象数组?

来自分类Dev

验证“类型” json模式失败

来自分类Dev

验证“类型” json模式失败

来自分类Dev

如何在JSON模式验证器中表示联合类型?

来自分类Dev

JSON模式对象包含值

来自分类Dev

验证包含字典的JSON对象

来自分类Dev

如何基于枚举数组的组合验证JSON模式?

来自分类Dev

如何从包含对象数组的json中获取特定对象

来自分类Dev

Typescript JSON模式对象的类型

来自分类Dev

Json 模式:是否可以验证字符串是 JSON 数组还是对象?

来自分类Dev

对象数组的JSON模式定义

来自分类Dev

数组内对象的json模式

来自分类Dev

json模式如何代表具有不同对象的数组?

来自分类Dev

OCMockito / OCHamcrest验证数组包含对象属性

来自分类Dev

如何使用Yup验证JSON对象数组的单个元素

来自分类Dev

如何判断JSON结果是否包含对象或数组?

来自分类Dev

如何读取包含用户定义类的对象数组的JSON响应?

来自分类Dev

如何将此包含数组的 JavaScript 对象转换为 JSON?

来自分类Dev

如何对包含 json 对象的可观察数组进行排序?

来自分类Dev

json模式来验证具有anyOf和oneOf要求的对象数组

来自分类Dev

json模式来验证具有anyOf和oneOf要求的对象数组

来自分类Dev

如何使用CURL发布包含图像和包含对象数组的JSON对象的多部分表单

来自分类Dev

其值是对象数组的对象的JSON模式

来自分类Dev

如何验证数组中的对象

Related 相关文章

  1. 1

    使用json模式验证数组json包含几个无序对象

  2. 2

    JSON模式验证:验证对象数组

  3. 3

    条件数组对象的JSON模式验证

  4. 4

    用于对象数组的Python JSON模式验证

  5. 5

    如何将包含不同数据类型的JSON数组反序列化为单个对象

  6. 6

    如何验证JSON对象中的JSON对象数组?

  7. 7

    验证“类型” json模式失败

  8. 8

    验证“类型” json模式失败

  9. 9

    如何在JSON模式验证器中表示联合类型?

  10. 10

    JSON模式对象包含值

  11. 11

    验证包含字典的JSON对象

  12. 12

    如何基于枚举数组的组合验证JSON模式?

  13. 13

    如何从包含对象数组的json中获取特定对象

  14. 14

    Typescript JSON模式对象的类型

  15. 15

    Json 模式:是否可以验证字符串是 JSON 数组还是对象?

  16. 16

    对象数组的JSON模式定义

  17. 17

    数组内对象的json模式

  18. 18

    json模式如何代表具有不同对象的数组?

  19. 19

    OCMockito / OCHamcrest验证数组包含对象属性

  20. 20

    如何使用Yup验证JSON对象数组的单个元素

  21. 21

    如何判断JSON结果是否包含对象或数组?

  22. 22

    如何读取包含用户定义类的对象数组的JSON响应?

  23. 23

    如何将此包含数组的 JavaScript 对象转换为 JSON?

  24. 24

    如何对包含 json 对象的可观察数组进行排序?

  25. 25

    json模式来验证具有anyOf和oneOf要求的对象数组

  26. 26

    json模式来验证具有anyOf和oneOf要求的对象数组

  27. 27

    如何使用CURL发布包含图像和包含对象数组的JSON对象的多部分表单

  28. 28

    其值是对象数组的对象的JSON模式

  29. 29

    如何验证数组中的对象

热门标签

归档