我有一个 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”。这就是我想做的想法。我想允许一个或多个此属性,而无需对对象的所有实例进行硬编码。
您可以创建动态属性并应用架构定义。
{
"$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"
}
}
}
}
}
}
}