JSON Schema中patternProperties未按预期工作问题求助
问题分析与修复
你要的是能验证"audio"或"digital"作为键、对应字符串值的JSON结构,但你的Schema配置有两个关键问题,导致patternProperties没起作用:
- 层级放错了:你把patternProperties写到了
"Definitions"子对象里,但你实际要约束的是顶层对象的字段,不是"Definitions"下面的字段。 - additionalProperties限制错了范围:外层的
"additionalProperties":false会强制顶层对象只能有"Definitions"这一个属性,直接把你要的"audio"/"digital"字段给禁用了。
修复后的Schema
{ "$schema": "https://json-schema.org/draft-07/schema#", "description": "通用定义", "type": "object", "patternProperties": { "^(digital|audio)$": {"type": "string"} }, "additionalProperties": false }
关键说明
- 把
patternProperties移到顶层,直接约束顶层的字段名。 - 正则表达式加上
^和$锚点,确保字段名完全匹配digital或audio,避免误匹配包含这两个字符串的其他字段(比如audiobook)。 additionalProperties: false放在顶层,保证除了符合规则的字段外,不允许添加其他多余字段。
现在这个Schema就能验证你想要的JSON结构了:
{ "audio": "These are mp3 artifacts" }
或者
{ "digital": "These are .mp4 or .wav files" }
内容的提问来源于stack exchange,提问作者BreenDeen
相关产品推荐
相关产品推荐

