JSON模式-基于选定值的下拉列表其他下拉列表

时间:2018-11-09 13:37:41

标签: json dropdown jsonschema json-schema-validator

假设我具有以下数据结构

Option A
Option B
    Option B1
        Option B2.1
        Option B2.2

我正在尝试创建一个允许此操作的枚举结构,以便我可以基于先前选择的下拉列表的值生成一个下拉列表。

示例:

Select option A -> No additional dropdowns
Select option B -> Generate dropdown with Option B1
Select option B1 -> Generate dropdown with Option B2.1 and Option B2.2

当您要使用childeren创建数组时,如果枚举有类似的可能,这将起作用

{
  "$schema": "http://json-schema.org/draft-07/schema#",

  "definitions": {
    "medicine": {
      "type": "object",
      "properties": {
        "value": { "type": "string" },
        "categories": {
          "type": "array",
          "items": { "$ref": "#/definitions/medicine" }
        }
      }
    }
  },
  "properties": {
    "person": { "$ref": "#/definitions/medicine" }
  }

}

然后枚举结构应该是这样的

[
     { 
        "value ":  "Option A" 
     }, 
     { 
        "value ":  "Option B ", 
        "categories ": [ 
         { 
            "value ":  "Option B1 ", 
            "categories ": [ 
             {
                "value ":  "Option B1.1" 
             }, 
             { 
                "value ":  "Option B1.2" 
             } 
           ] 
         } 
       ] 
    }
]

因此,我正在寻找一种数据结构,该结构允许我根据自己的布局生成引擎中此处选择的值进行下拉。

1 个答案:

答案 0 :(得分:4)

您是否考虑过扁平化结构,以便更轻松地查找选项和子选项?

让我们想象一下,您已经为根选项有了一个初始数组:

[
  'opt_a',
  'opt_b'
]

然后,您将获得所有选项的拼合图,从中可以衍生标签和随后的下拉列表:

{
  opt_a: {
    label: 'Option A'
  },
  opt_b: {
    label: 'Option B',
    children: ['opt_b1']
  },
  opt_b1: {
    label: 'Option B1',
    children: ['opt_b11', 'opt_b12']
  }
  opt_b11: {
    label: 'Option B1.1'
  }
  opt_b12: {
    label: 'Option B1.2'
  }
}

我希望这能回答您的问题,并且很容易解释。