JavaScript で複雑なオブジェクトを検証する必要があります。
オブジェクトは辞書に基づいています:
var dict = {'1':true,'2':true,'3':true};
ペアのオブジェクト ストア マトリックス (通常は完全ではない):
var obj = {'1':{
'1': 'str1',
'2': 'str2',
'3': 'str3',
},'2':{
'1': 'str1',
'2': 'str2',
}
};
AJVバリデーターでバリデーションスキーマを作っています。
スキーマ要件:
- 第 1 レベルのオブジェクトには、ディクショナリのプロパティのみが含まれます。
- 第 2 レベルのオブジェクトには、ディクショナリのプロパティのみが含まれます。
- データは文字列です
スキーマの生成:
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 秒かかります (検証は高速ですが、コンパイルは低速です)。さらに、メモリ不足の例外が時々スローされます。より良い検証スキーマを作成することは可能ですか?