如何使用JSON Schema验证含随机名称子属性中的指定JSON属性
如何验证JSON中shipping_address下随机名称子属性里的"haha"字段
你遇到的问题是因为Schema的层级匹配错了——你之前的写法是在shipping_address对象里直接找haha字段,但实际上haha是藏在shipping_address的随机名称子对象里的。下面给你两种针对性的解决方案:
先明确你的问题场景
需要验证的JSON结构:
{ "shipping_address": { "randomName1":{ "haha":"ddd"}, "randomName2":{ "haha":"ddd"}, "randomName3":{ "haha":"ddd"} } }
你之前尝试的无效Schema:
{ "$schema": "http://json-schema.org/draft-6/schema#", "type": "object", "properties": { "shipping_address": { "allOf": [ { "properties": { "haha": { "type": "integer" } } } ] } } }
解决方案1:用additionalProperties约束所有随机子属性
如果这些随机名称的键没有固定格式,完全是任意的,用additionalProperties来定义shipping_address下所有子对象的规则最适合:
{ "$schema": "http://json-schema.org/draft-6/schema#", "type": "object", "properties": { "shipping_address": { "type": "object", // 定义shipping_address下所有子对象必须遵循的规则 "additionalProperties": { "type": "object", "required": ["haha"], // 可选:如果要求haha是必填字段 "properties": { "haha": { "type": "integer" } } } } }, "required": ["shipping_address"] // 可选:如果shipping_address是必填项 }
这个Schema会检查shipping_address里的每一个子对象,确保它们都包含haha字段,且haha的值为整数。
解决方案2:用patternProperties匹配有规律的随机键
如果你的随机键有固定模式(比如都以randomName开头、后面跟数字),可以用patternProperties精准匹配这些键,还能搭配additionalProperties: false来禁止不符合模式的键:
{ "$schema": "http://json-schema.org/draft-6/schema#", "type": "object", "properties": { "shipping_address": { "type": "object", // 匹配以randomName开头、后跟数字的键 "patternProperties": { "^randomName\\d+$": { "type": "object", "required": ["haha"], "properties": { "haha": { "type": "integer" } } } }, "additionalProperties": false // 禁止出现不符合上述模式的其他键 } } }
这样既能精准约束符合命名规律的子属性,又能避免无关的键混入。
内容的提问来源于stack exchange,提问作者Spider
相关产品推荐
相关产品推荐

