当前位置:  开发笔记 > 前端 > 正文

z架构中"anyof"和"oneof"之间有什么区别?

如何解决《z架构中"anyof"和"oneof"之间有什么区别?》经验,为你挑选了1个好方法。

看起来两者都适用于我的输入验证代码.那究竟是什么区别?

具有oneof的架构

[{
  "id": "MyAction",
  "oneOf": [{ "$ref": "A1" },
            { "$ref": "A2" }]
 },
 {
  "id": "A1",
  "properties": {
      "class1": { "type": "string"},
      "class2": { "type": "string"}
   }
 },
 {
  "id": "A2",
  "properties": {
      "class2": { "type": "string"},
      "class3": { "type": "string"}
   }
 }
]

架构与任何

    [{
  "id": "MyAction",
  "anyOf": [{ "$ref": "A1" },
            { "$ref": "A2" }]
 },
 {
  "id": "A1",
  "properties": {
      "class1": { "type": "string"},
      "class2": { "type": "string"}
   }
 },
 {
  "id": "A2",
  "properties": {
      "class2": { "type": "string"},
      "class3": { "type": "string"}
   }
 }
]

T.J. Crowder.. 15

如果您查看JSON Schema文档,它会说:

5.5.4.任何

5.5.4.1.有效值

该关键字的值必须是一个数组.这个数组必须至少有一个元素.

数组的元素必须是对象.每个对象必须是有效的JSON模式.

5.5.4.2.成功验证的条件

如果实例针对此关键字的值定义的至少一个模式成功验证,则实例将针对此关键字成功验证.

5.5.5.oneOf

5.5.5.1.有效值

该关键字的值必须是一个数组.这个数组必须至少有一个元素.

数组的元素必须是对象.每个对象必须是有效的JSON模式.

5.5.5.2.成功验证的条件

如果实例针对此关键字的值定义的一个模式成功验证,则实例将针对此关键字成功验证.

请注意我在上面的重点.anyOf表示该项必须针对至少一个(但可能不止一个)模式进行验证.oneOf意味着它必须针对其中一个模式进行验证.



1> T.J. Crowder..:

如果您查看JSON Schema文档,它会说:

5.5.4.任何

5.5.4.1.有效值

该关键字的值必须是一个数组.这个数组必须至少有一个元素.

数组的元素必须是对象.每个对象必须是有效的JSON模式.

5.5.4.2.成功验证的条件

如果实例针对此关键字的值定义的至少一个模式成功验证,则实例将针对此关键字成功验证.

5.5.5.oneOf

5.5.5.1.有效值

该关键字的值必须是一个数组.这个数组必须至少有一个元素.

数组的元素必须是对象.每个对象必须是有效的JSON模式.

5.5.5.2.成功验证的条件

如果实例针对此关键字的值定义的一个模式成功验证,则实例将针对此关键字成功验证.

请注意我在上面的重点.anyOf表示该项必须针对至少一个(但可能不止一个)模式进行验证.oneOf意味着它必须针对其中一个模式进行验证.


@Somnath:我很难理解这个问题,但是如果我理解了这个问题,你就会落后.`anyOf`将要求针对每个模式测试项目,直到它匹配至少一个,然后可以忽略后面的模式(如果它们匹配或不匹配则无关紧要).`oneOf`表示项目需要针对每个模式进行测试,即使它与一个模式匹配,如果它与另一个模式匹配,则测试需要失败.
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有