Node.js 有没有一种方法可以基于同一级别的属性在jsonschema中创建枚举? 描述
我有一个JSON对象,它有两个属性(除其他属性外)Node.js 有没有一种方法可以基于同一级别的属性在jsonschema中创建枚举? 描述,node.js,jsonschema,Node.js,Jsonschema,我有一个JSON对象,它有两个属性(除其他属性外)category和subcategory,我有一个函数获取类别列表,另一个函数获取给定类别的子类别 因此,我的模式如下所示: { “类型”:“数组”, “项目”:{ “类型”:“对象”, “财产”:{ “类别”:{ “类型”:“字符串”, “枚举”:getCategories() }, “子类别”:{ “类型”:“字符串”, “枚举”:获取子类别(类别) } } } 注:一个子类别仅在一个主类别中 问题 类别列表很大,我想用json模式检查类别
category
和subcategory
,我有一个函数获取类别列表,另一个函数获取给定类别的子类别
因此,我的模式如下所示:
{
“类型”:“数组”,
“项目”:{
“类型”:“对象”,
“财产”:{
“类别”:{
“类型”:“字符串”,
“枚举”:getCategories()
},
“子类别”:{
“类型”:“字符串”,
“枚举”:获取子类别(类别)
}
}
}
注:一个子类别仅在一个主类别中
问题
类别列表很大,我想用json模式检查类别和子类别是否有效,所以我想知道是否有办法做到这一点
使用
例子:
假设我有类别A和类别B,它们分别是[A1,A2]
和[B1,B2]
,如果要验证的json有类别A,我想检查子类别是否在[A1,A2]
而不是[A1,A2,B1,B2]
我试过的
尝试了来自另一个的if-else语句,但正如我提到的,列表很大,目前看起来根本不是一个好的做法,
如果
/,则需要构造来根据类别指定子类别值:
{
"type": "array",
"items": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [ ... ]
},
"subcategory": {
"type": "string",
},
},
"allOf": [
{
"if": {
"properties": {
"category": { "const": "option1" },
}
},
"then": {
"properties": {
"subcategory": {
"enum": [ ... ]
}
}
}
},
{
"if": {
"properties": {
"category": { "const": "option2" },
}
},
"then": {
"properties": {
"subcategory": {
"enum": [ ... ]
}
}
}
},
{ ... }
]
}
}
但是,有人建议为下一个规范草案添加一个新的关键字,这将大大缩短语法:您是说您不想在模式中内联类别列表吗?您可以通过编程生成模式来包含列表,但不能在模式中嵌入代码。JSON模式是数据.@Ether不,我不是这个意思,如果解释不到位,很抱歉。我的意思是,我希望每个json都限制在json中明确的类别中的子类别列表中,如果这有意义的话,请编辑问题,使其更清晰