【问题标题】:How to create one or more options within JSON schema with objects?如何在带有对象的 JSON 模式中创建一个或多个选项?
【发布时间】:2021-12-12 08:49:19
【问题描述】:

对不起,如果之前已经发布过!我找不到适合我的用例并且有效的答案:(

我有以下 JSON (JSON 1),我正在为它编写一个 JSON 模式 (见最后)。大多数情况下,除了我们在其中包含 prop5 和对象的地方之外,一切都有效。

JSON 1

  "prop1": "somestuff",
  "prop2": "morestuff",
  "temp_list": [
    "stuff",
    "otherstuff",
    "final stuff"
  ],
  "prop4": "morestuff",
  "prop5": {
    "sub_prop_1": {
      "more_properties": "temp",
      "and_even_more": "temp"
    }
  },
  "prop6": "finallyDone"
}

我想创建一个选项,让我可以拥有三个“子道具”中的一个或多个,例如 JSON 2

JSON 2

{
  "prop1": "somestuff",
  "prop2": "morestuff",
  "temp_list": [
    "stuff",
    "otherstuff",
    "final stuff"
  ],
  "prop4": "morestuff",
  "prop5": {
    "sub_prop_1": {
      "more_properties": "temp",
      "and_even_more": "temp"
    },
    "sub_prop_2": {
      "randomProp": "stuff", 
      "anotherOne": "moreStuff"
    }, 
    "sub_prop_3": {
      "last_random_prop": "somestuff"
    }
  },
  "prop6": "finallyDone"
}

两个 JSON 都应该是有效的。

但是,我认为我没有正确编写架构。当前行为接受可能在“prop 5”下列出的任何属性,无论在“sub props”中输入的值的名称和类型如何。

预期的行为是我拥有三个“sub_props”中的一个或多个,以及每个可能具有的任何其他字符串属性。

这是我目前拥有的架构,如何修复我的架构以拥有三个“sub_props”中的一个或多个?我相信我应该使用anyOf,但我还不能正确使用它。

JSON 架构

{
    "type": "object",
    "properties": {
      "prop1": {
        "type": "string"
      },
      "prop2": {
        "type": "string"
      },
      "temp_list": {
        "type": "array",
        "items": [
          {
            "type": "string"
          },
          {
            "type": "string"
          },
          {
            "type": "string"
          }
        ]
      },
      "prop4": {
        "type": "string"
      },
      "prop5": {
        "type": "object",
        "anyOf":[
            {
                "properties": {
        
                    "sub_prop_1": {
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    }, 
                    "sub_prop_2": {
                        "type": "object", 
                        "additionalProperties": {
                            "type": "string"
                        }
                    },
                    "sub_prop_3": {
                        "type": "object", 
                        "additionalProperties": {
                            "type": "string"
                        }
                    }
            }


        }}
        ]
      },
      "prop6": {
        "type": "string"
      }
    },
    "required": [
      "prop1",
      "prop2",
      "temp_list",
      "prop4",
      "prop5",
      "prop6"
    ]
  }

感谢您的帮助! :)

【问题讨论】:

    标签: json jsonschema


    【解决方案1】:

    我想通了!

    {
      "$schema": "http://json-schema.org/draft-06/schema#",
      "$ref": "#/definitions/Welcome8",
      "definitions": {
          "Welcome8": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                  "prop1": {
                      "type": "string"
                  },
                  "prop2": {
                      "type": "string"
                  },
                  "temp_list": {
                      "type": "array",
                      "items": {
                          "type": "string"
                      }
                  },
                  "prop4": {
                      "type": "string"
                  },
                  "prop5": {
                      "$ref": "#/definitions/Prop5"
                  },
                  "prop6": {
                      "type": "string"
                  }
              },
              "required": [
                  "prop1",
                  "prop2",
                  "prop4",
                  "prop5",
                  "prop6",
                  "temp_list"
              ],
              "title": "Welcome8"
          },
          "Prop5": {
              "type": "object",
              "minProperties":1,
              "additionalProperties": false,
              "properties": {
                  "sub_prop_1": {
                      "$ref": "#/definitions/SubProp1"
                  },
                  "sub_prop_2": {
                      "$ref": "#/definitions/SubProp2"
                  },
                  "sub_prop_3": {
                      "$ref": "#/definitions/SupProp3"
                  }
              },
              "anyOf": [ 
                  {"required": ["sub_prop_1"]},
                  {"required": ["sub_prop_2"]},
                  {"required": ["sub_prop_3"]}
              ],
              "title": "Prop5"
          },
          "SubProp1": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "title": "SubProp1"
          },
          "SubProp2": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "title": "SubProp2"
          },
          "SupProp3": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "title": "SupProp3"
          }
      }
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2013-03-01
      • 1970-01-01
      • 2012-06-27
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多