如何编写JSON Schema验证Google GeoCoding API的指定地址组件?
修正后的Google Geocoding API JSON Schema
核心修正点
- 将错误定义为字符串类型的
types修正为字符串数组,匹配API实际返回结构 - 新增验证规则:确保
address_components数组中存在分别包含locality、country、postal_code的对象(允许同时存在其他类型对象)
完整Schema代码
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["results"], "properties": { "results": { "type": "array", "minItems": 1, "items": { "type": "object", "required": ["address_components"], "properties": { "address_components": { "type": "array", "minItems": 1, // 确保数组覆盖指定的三个地址类型 "allOf": [ { "contains": { "type": "object", "required": ["types"], "properties": { "types": { "type": "array", "contains": {"const": "locality"} } } } }, { "contains": { "type": "object", "required": ["types"], "properties": { "types": { "type": "array", "contains": {"const": "country"} } } } }, { "contains": { "type": "object", "required": ["types"], "properties": { "types": { "type": "array", "contains": {"const": "postal_code"} } } } } ], "items": { "type": "object", "required": ["long_name", "short_name", "types"], "properties": { "long_name": {"type": "string"}, "short_name": {"type": "string"}, // 修正types为字符串数组,支持多类型标记 "types": { "type": "array", "items": {"type": "string"}, "minItems": 1 } } } } } } } } }
关键规则说明
types字段:修正为数组类型,每个元素为字符串,和Google API返回的结构完全匹配(API中types是包含多个类型标记的数组,比如["locality", "political"])address_components的allOf+contains组合:- 每个
contains规则检查数组中至少存在一个对象的types数组包含指定类型值 - 三个
contains分别对应locality、country、postal_code,确保这三个核心类型都被覆盖
- 每个
- 允许
address_components中存在其他类型的对象,只要满足上述三个核心验证条件即可
内容的提问来源于stack exchange,提问作者codekandis
相关产品推荐
相关产品推荐

