看起来两者都适用于我的输入验证代码.那究竟是什么区别?
具有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
意味着它必须只针对其中一个模式进行验证.
如果您查看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
意味着它必须只针对其中一个模式进行验证.