如何在 JSON 模式中允许对象的多个实例

问题描述 投票:0回答:1

我有一个 json 文件,我希望架构接受同一对象的多个实例。这是一个 json 文件示例。

{
    "component_name1": {
        "codes": {
            "if_exists": "SSNM",
            "if_does_not": "MMNS"
        },
        "range": {
            "lower": 0.0,
            "upper": 1.0
        }
  },
    "component_name2": {
        "codes": {
            "if_exists": "SJHS",
            "if_does_not": "OTTF"
        },
        "range": {
            "lower": 12.3,
            "upper": 45.6
        }
    }
}

我找到了对 component_name1 和 component_name2 进行硬编码的有效模式(如下所示),但我不希望对它们进行硬编码。 Component_name1 和 component_name2 是同一类型的对象。我想要一个允许任意数量的这些对象的模式。如果我的架构的用户需要 component_name3、component_name4、component_name5 等,我希望架构能够接受它。我怎样才能做到这一点?

注意:这是我不想要的当前架构。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "component_name1": {
      "type": "object",
      "properties": {
        "codes": {
          "type": "object",
          "properties": {
            "if_exists": {
              "type": "string"
            },
            "if_does_not": {
              "type": "string"
            }
          },
        },
        "range": {
          "type": "object",
          "properties": {
            "lower": {
              "type": "number"
            },
            "upper": {
              "type": "number"
            }
          },
        }
      },
    },
      
    "component_name2": {
      "type": "object",
      "properties": {
        "codes": {
          "type": "object",
          "properties": {
            "if_exists": {
              "type": "string"
            },
            "if_does_not": {
              "type": "string"
            }
          },
        },
        "range": {
          "type": "object",
          "properties": {
            "lower": {
              "type": "number"
            },
            "upper": {
              "type": "number"
            }
          },
        }
      },
    }
  },
}

我很想拥有这样的东西,但我知道下面的示例不允许我想要的对象的多个实例。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "ANY COMPONENT NAME": {
      "type": "object",
      "properties": {
        "codes": {
          "type": "object",
          "properties": {
            "if_exists": {
              "type": "string"
            },
            "if_does_not": {
              "type": "string"
            }
          },
        },
        "range": {
          "type": "object",
          "properties": {
            "lower": {
              "type": "number"
            },
            "upper": {
              "type": "number"
            }
          },
        }
      },
    },
  }
      
}

我尝试使用正则表达式,其中 component_name1 允许使用任何字符串,例如 (^.*$)。正则表达式似乎无法在 json 模式中被识别。

您知道如何在正则表达式中声明 x 出现次数吗?就像我可以做^Hm*$,它可以是“Hm”或“Hmmmmmm”或“Hmm”。这就是我想做的想法。我想允许一个或多个此属性,而无需对对象的所有实例进行硬编码。

json jsonschema
1个回答
0
投票

您可以创建动态属性并应用架构定义。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": {
    "$ref": "#/definitions/component_type"
  },
  "definitions": {
    "component_type": {
      "type": "object",
      "properties": {
        "codes": {
          "type": "object",
          "properties": {
            "if_exists": {
              "type": "string"
            },
            "if_does_not": {
              "type": "string"
            }
          }
        },
        "range": {
          "type": "object",
          "properties": {
            "lower": {
              "type": "number"
            },
            "upper": {
              "type": "number"
            }
          }
        }
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.