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 ..
}
我正在尝试为 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 ..
}