UUID 作为 JSON 模式中的对象键

UUIDs as object keys in JSON Schema

我正在尝试为 JSON API 定义一个 JSON 模式,它使用 UUID 作为 JSON 对象的键。使它更复杂的是它也是一个嵌套对象。 示例:

{
   "nodes": {
       "7059e5ad-fac0-4fda-aa3e-2655d6e60506": {
           "type": "Class",
           "name": "Supermarket",
           "data": {},
           "instances": {},
       }
   }
}

生成的架构如下:

 {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "nodes": {
            "type": "object",
            "properties": {
                "7059e5ad-fac0-4fda-aa3e-2655d6e60506": {
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string"
                        },
                        "name": {
                            "type": "string"
                        },
                        "data": {
                            "type": "object"
                        },
                        "instances": {
                            "type": "object"
                        }
                    }
                }
            }
        }
    }
}

有没有一种方法可以创建一个架构,其中架构中没有 UUID 值,因为这些值可以是任何值?

properties 替换为 patternProperties,并将您的 UUID 替换为以下正则表达式。

^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$

patternProperties 关键字类似于 properties 关键字,但您可以使用正则表达式作为关键字。这适用于 draft-04 JSON Schema,但如果可以的话,强烈建议使用更新版本的 JSON 架构。

这个正则表达式是 borrowed,但我有理由相信它适用于 UUID。

您可以在 draft2019-09 及更高版本中利用现有的 uuid 格式定义:

"propertyNames": {
  "format": "uuid"
},
"additionalProperties": {
  .. definition of the values that go under the uuid properties ..
}