Javascript 如果传递的是数组而不是对象,则json模式将通过验证
这是我在应用程序中管理配置文件的模式:Javascript 如果传递的是数组而不是对象,则json模式将通过验证,javascript,jsonschema,Javascript,Jsonschema,这是我在应用程序中管理配置文件的模式: var ProfileJsonSchema = { properties: { Profiles: { optional: false, items: { optional: false, properties: { Email: {type: String}, FirstName: {type: String}, Zip: {t
var ProfileJsonSchema = {
properties: {
Profiles: {
optional: false,
items: {
optional: false,
properties: {
Email: {type: String},
FirstName: {type: String},
Zip: {type: String},
City: {type: String}
}}}};
还有我的数据
[{}]
以及要测试的代码
validation = Validate([{}], ProfileJsonSchema);
if (!validation.valid) {
return;
}
// do something...
验证是可以的。
为什么?
是否有处理此类错误的解决方案?这里可能有输入错误:
validation = Validate([{}], , ProfileJsonSchema);
3个参数而不是2个?十年后回答这个问题,json模式类型断言丢失。如果没有此选项,则任何类型都是有效的。properties断言看起来似乎只允许对象,但实际上,它只断言如果属性概要文件存在,那么它必须满足声明的子模式。因为Profiles甚至不是必需的属性,所以任何没有Profiles属性的对象都是有效的。您选择了什么JSON模式实现?您能提供一个JSFIDLE示例吗?我已经用CommonJs版本和最新的kriszyp版本做了一些测试。我没有足够的能力在JSFIDLE上放置独立脚本: