Node.js 有没有一种方法可以基于同一级别的属性在jsonschema中创建枚举? 描述

Node.js 有没有一种方法可以基于同一级别的属性在jsonschema中创建枚举? 描述,node.js,jsonschema,Node.js,Jsonschema,我有一个JSON对象,它有两个属性(除其他属性外)category和subcategory,我有一个函数获取类别列表,另一个函数获取给定类别的子类别 因此,我的模式如下所示: { “类型”:“数组”, “项目”:{ “类型”:“对象”, “财产”:{ “类别”:{ “类型”:“字符串”, “枚举”:getCategories() }, “子类别”:{ “类型”:“字符串”, “枚举”:获取子类别(类别) } } } 注:一个子类别仅在一个主类别中 问题 类别列表很大,我想用json模式检查类别

我有一个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中明确的类别中的子类别列表中,如果这有意义的话,请编辑问题,使其更清晰