如何验证字典所有值符合JSON Schema?有无更优方案替代全匹配模式?
更优实现方式:使用
additionalProperties 当你需要验证对象中所有属性值都符合指定Schema、对键无限制时,最简洁且直观的方案是使用additionalProperties,而非patternProperties配合全匹配正则。
优化后的示例代码
"foo": { "type": "object", "additionalProperties": { "$ref": "#/$defs/bar" } }
为什么这更优?
- 写法简洁:无需编写
^.*$这种全匹配正则,直接通过additionalProperties指定所有属性值的约束规则,语义更清晰。 - 性能更优:避免了正则匹配的额外开销(虽然对于简单正则影响极小,但在大规模数据验证场景下仍有收益)。
- 符合JSON Schema设计意图:
additionalProperties的核心用途之一就是约束未被properties或patternProperties匹配到的属性;当你没有定义任何properties或patternProperties时,它会自动应用到所有属性,完美契合你的需求。
注意事项
如果后续需要对部分特定键设置特殊验证规则,可以结合properties或patternProperties使用:
"foo": { "type": "object", // 对特定键"specialKey"设置单独规则 "properties": { "specialKey": { "type": "string" } }, // 其余所有键的值必须符合bar的Schema "additionalProperties": { "$ref": "#/$defs/bar" } }
内容的提问来源于stack exchange,提问作者reyymo
相关产品推荐
相关产品推荐

