我需要验证 JavaScript 中的复杂对象。
对象基于字典:
var dict = {'1':true,'2':true,'3':true};
对象存储矩阵对(通常不完整):
var obj = {'1':{
'1': 'str1',
'2': 'str2',
'3': 'str3',
},'2':{
'1': 'str1',
'2': 'str2',
}
};
我使用 AJV 验证器制作验证模式。
架构要求:
- 第一级对象仅包含字典中的属性。
- 第二级对象仅包含字典中的属性。
- 数据是一个字符串
生成架构:
var dict = {'1':true,'2':true,'3':true};
var subProperties = R.map(function(item){
return {
'type' : 'string',
"minLength": 1,
}
}, dict);
var root = {
"type" : "object",
"additionalProperties" : false
};
root.properties = R.map(function(item){
return {
"type" : "object",
'properties' : subProperties,
"additionalProperties" : false
};
}, dict);
console.log(root)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/4.9.0/ajv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.22.1/ramda.min.js"></script>
此模式运行良好,但问题在于性能。当字典包含 200 个元素时,编译此模式需要 10 秒(验证快,编译慢)。此外,它不时抛出内存异常。是否可以制作更好的验证模式?