如何定义含生成UUID键的对象值的JSON Schema?
问题描述
我需要的请求格式如下:
{ "uuid_1": [{obj}, {obj}, {obj}], "uuid_2": [{obj}, {obj}], ... "uuid_n": [{obj}, {obj}] }
其中obj是包含若干ID的简单对象,示例如下:
{ "id": "string", "userId": "string" }
我希望保留该JSON格式,因为修改会导致前后端都需要额外的数据处理。注意:UUID是生成的,我无法提前预知会出现哪些UUID。目前我已通过以下方式指定对象的键必须为UUID格式:
"propertyNames": { "format": "uuid" }
请问如何定义该对象值的JSON Schema?
解决方案
你可以使用additionalProperties来定义所有UUID键对应的值的结构,结合已有的propertyNames约束,完整的JSON Schema如下:
{ "type": "object", "propertyNames": { "format": "uuid" }, "additionalProperties": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "userId": { "type": "string" } }, "required": ["id", "userId"] } } }
关键说明:
additionalProperties:用于定义对象中所有动态生成的UUID键对应的值的结构,因为无法提前知晓具体的UUID键名,这个关键字会匹配所有未显式声明的属性。- 数组结构约束:指定每个UUID键对应的值是一个数组,数组内的每个元素必须符合
items中定义的对象结构——包含id和userId两个字符串类型字段。 required字段(可选):如果id和userId是必填字段,添加该数组可以确保这两个字段必须存在于每个数组元素对象中;若为可选字段,可移除该配置。
内容的提问来源于stack exchange,提问作者peter.cambal
相关产品推荐
相关产品推荐

