需求:通过JSON Schema校验确保所有层级ActionCode与HeaderActionCode一致
实现所有层级ActionCode与HeaderActionCode一致的JSON Schema校验
要实现无论嵌套层级多少,所有节点的ActionCode都与LeadDetails.HeaderActionCode值一致的校验,可以借助JSON Schema的递归引用和**数据引用($data)**特性来完成。以下是具体的Schema实现和说明:
完整JSON Schema
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "Body": { "type": "object", "properties": { "LeadDetails": { "type": "object", "properties": { "HeaderActionCode": { "type": "string" }, "ActionCode": { "type": "string", "$data": "/Body/LeadDetails/HeaderActionCode" }, "Version": { "type": "integer" }, "LineItems": { "type": "array", "items": { "$ref": "#/$defs/LineItem" } } }, "required": ["HeaderActionCode", "ActionCode"], "$defs": { "LineItem": { "type": "object", "properties": { "ActionCode": { "type": "string", "$data": "/Body/LeadDetails/HeaderActionCode" }, "Version": { "type": "integer" }, "LineItems": { "type": "array", "items": { "$ref": "#/$defs/LineItem" } } }, "required": ["ActionCode"] } } } }, "required": ["LeadDetails"] } }, "required": ["Body"] }
关键特性说明
- $data 数据引用:每个
ActionCode字段通过$data: "/Body/LeadDetails/HeaderActionCode"直接引用根层级的Header值,强制所有ActionCode与该值完全匹配。注意该特性仅支持JSON Schema Draft 07及以上版本。 - 递归结构校验:通过
$ref: "#/$defs/LineItem"定义递归的LineItem结构,不管LineItems嵌套多少层,都会自动应用相同的校验规则,确保所有子节点的ActionCode符合要求。 - 必填字段约束:明确标记
HeaderActionCode和所有层级的ActionCode为必填字段,避免因缺失关键字段导致校验逻辑失效。
校验效果示例
- 符合要求的JSON(如你提供的示例)会通过校验;
- 若任意层级的
ActionCode值与HeaderActionCode不一致(例如把某层ActionCode改为"Update"),校验会直接报错。
内容的提问来源于stack exchange,提问作者Deepak Sharma
相关产品推荐
相关产品推荐

