如何在JSON模式中定义具有可验证名称的对象?

如何在JSON模式中定义具有可验证名称的对象?,json,enums,jsonschema,Json,Enums,Jsonschema,我想为这个JSON伪代码示例创建一个JSON模式: { "xyz": { "$something": { "property_a": "...", "property_b": "...", "property_c": "..." } } } $something可以是以下字符串之一:foo、bar或buz。我当前的架构如下所示: { "xyz": { "id":

我想为这个JSON伪代码示例创建一个JSON模式:

{
    "xyz": {
        "$something": {
            "property_a": "...",
            "property_b": "...",
            "property_c": "..."
        }
    }
}
$something可以是以下字符串之一:foo、bar或buz。我当前的架构如下所示:

{
  "xyz": {
    "id": "xyz",
    "type": "object",
    "properties": {
      "foo": {
        "id": "foo",
        "type": "object",
        "additionalProperties": false,
        "required": ["property_a"],
        "properties": {
          "property_a": {
            "id": "property_a",
            "type": "string"
          },
          "property_b": {
            "id": "property_b",
            "type": "string"
          },
          "property_c": {
            "id": "property_a",
            "type": "string"
          }
        }
      },
      "bar": {
        ... copy&paste foo
      },
      "buz": {
        ... copy&paste foo
      }
    }
  }
}
这是可行的,但有很多重复的代码。所以我正在寻找一种更优雅的方法来实现它

如何在JSON模式中定义允许作为属性名称的枚举值列表?

模式属性与属性类似,只是对象的键是正则表达式

一个来自

在本例中,名称以 前缀S_u必须是字符串,任何带有前缀I_u的字符串都必须是字符串 整数。在properties关键字中明确定义的任何属性 也接受,以及任何不匹配的附加属性 任何一个正则表达式都是禁止的


你看过参考资料了吗?谢谢你的评论!oneOf、anyOf等适用于关键字的值。我试图实现的是生成关键变量。这看起来像jsonapi。这里有一个很好的示例,说明您可能正在尝试执行的操作:。我使用该模式来验证我的所有资源,它使用引用来检查响应的形状。除了已知值之外,它似乎还使用图案属性定义变量值。您看过图案属性了吗?它不是枚举,但可以在正则表达式中创建列表。或者你还想要什么?=]@是的,这正是我想要的。非常感谢。
{
  "type": "object",
  "patternProperties": {
    "^S_": { "type": "string" },
    "^I_": { "type": "integer" }
  },
  "additionalProperties": false
}