首页 > 解决方案 > JSON Schema - 基于所选值的下拉列表 其他下拉列表

问题描述

假设我有以下数据结构

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" 
             } 
           ] 
         } 
       ] 
    }
]

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

标签: jsondropdownjsonschemajson-schema-validator

解决方案


您是否考虑过扁平化您的结构,以便更容易查找选项和子选项?

假设您有一个根选项的初始数组:

[
  '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'
  }
}

我希望这能回答你的问题并且足够不言自明。


推荐阅读