如何编写JSON Schema(v2020-12)验证无限嵌套的设计令牌?
设计令牌嵌套结构的JSON Schema解决方案(v2020-12)
针对你需要验证无限层级嵌套的设计令牌需求,以下是符合v2020-12版本的JSON Schema,严格满足「每个层级只能包含单个未知名称子属性或设计令牌,无额外属性」的规则:
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "anyOf": [ { "type": "object", "required": ["$value", "$type"], "additionalProperties": false }, { "type": "object", "maxProperties": 1, "additionalProperties": { "$ref": "#" } } ] }
关键规则说明
- 令牌对象分支:明确要求必须包含
$value和$type字段,且不允许有其他额外属性(additionalProperties: false)。 - 嵌套容器分支:限制对象只能有1个属性(
maxProperties: 1),并且这个属性的值必须符合当前Schema的规则(additionalProperties: { "$ref": "#" }),以此实现无限层级的嵌套验证。 anyOf逻辑:每个层级的结构只能是上述两种情况之一,完全匹配你提出的合法性要求。
验证示例
合法结构
{ "unknown_property_1": { "unknown_property_2": { "unknown_property_n": { "$value": "#fff", "$type": "color" } } } }
非法结构(存在多个属性)
{ "unknown_property_1": { "fancy_unwanted_property": 123, "unknown_property_2": { "unknown_property_n": { "$value": "#fff", "$type": "color" } } } }
该结构会因unknown_property_1包含2个属性,违反maxProperties: 1规则而验证失败。
内容的提问来源于stack exchange,提问作者mnstrr
相关产品推荐
相关产品推荐

