新闻中心

Golang如何实现简单的JSON Schema校验_Golang JSON Schema验证示例

2025-12-15
浏览次数:
返回列表
Go语言通过第三方库xeipuuv/gojsonschema实现JSON Schema校验,支持Draft 4规范,可定义结构规则并验证JSON数据,如字段类型、必填项、数值范围和格式(如email),使用NewStringLoader或NewReferenceLoader加载Schema和数据,Validate执行校验,result.Valid()判断结果,Errors()获取详细错误信息,适用于API请求验证等场景。

golang如何实现简单的json schema校验_golang json schema验证示例

在 Go 语言中,虽然标准库 encoding/json 提供了 JSON 的编码与解码功能,但并未内置对 JSON Schema 的校验支持。如果需要验证 JSON 数据是否符合预定义的结构和规则,可以通过第三方库来实现。一个常用且轻量的选择是 xeipuuv/gojsonschema,它完整实现了 JSON Schema Draft 4 规范。

安装 gojsonschema 库

使用以下命令安装 JSON Schema 校验库:

go get github.com/xeipuuv/gojsonschema

基本使用示例:校验 JSON 是否符合 Schema

下面是一个简单的例子,展示如何用 Go 定义 JSON Schema 并校验输入的 JSON 数据。

假设我们有一个用户信息的 JSON 结构,要求:

  • name 字段为字符串,且必填
  • age 字段为整数,且大于 0
  • email 字段为合法邮箱格式

对应的 JSON Schema 如下:

const userSchema = `{
"type": "object",
"required": ["name", "age", "email"],
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" }
}
}`

待校验的 JSON 数据:

const inputJSON = `{
"name": "Alice",
"age": 25,
"email": "alice@example.com"
}`

完整的校验代码:

达芬奇 达芬奇

达芬奇——你的AI创作大师

达芬奇 166 查看详情 达芬奇 package main

import (
"fmt"
"github.com/xeipuuv/gojsonschema"
)

const userSchema = `{
"type": "object",
"required": ["name", "age", "email"],
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 1 },
"email": { "type": "string", "format": "email" }
}
}`

const inputJSON = `{
"name": "Alice",
"age": 25,
"email": "alice@example.com"
}`

func main() {
schemaLoader := gojsonschema.NewStringLoader(userSchema)
documentLoader := gojsonschema.NewStringLoader(inputJSON)

result, err := gojsonschema.Validate(schemaLoader, documentLoader)
if err != nil {
panic(err.Error())
}

if result.Valid() {
fmt.Printf("数据校验通过")
} else {
fmt.Printf("校验失败:")
for _, desc := range result.Errors() {
fmt.Printf("- %s\n", desc)
}
}
}

处理校验错误

result.Valid() 返回 false 时,可以通过 result.Errors() 获取详细的错误列表。每个错误包含字段路径、类型和具体原因,例如:

  • “age must be greater than or equal to 1”
  • “email: does not match format 'email'”
  • “missing property: name”

这些信息可用于调试或返回给 API 调用方作为提示。

从文件加载 Schema 或 JSON

除了字符串,你也可以从本地文件或 HTTP URL 加载 Schema 和数据:

schemaLoader := gojsonschema.NewReferenceLoader("file:///path/to/schema.json")
documentLoader := gojsonschema.NewReferenceLoader("https://api.example.com/data.json")

注意使用 file://http(s):// 前缀触发引用加载器。

基本上就这些。使用 gojsonschema 可以快速实现结构化 JSON 校验,适合配置解析、API 请求验证等场景。不复杂但容易忽略的是格式关键字(如 email、uri)必须显式启用,某些高级特性如条件校验也需注意版本兼容性。

以上就是Golang如何实现简单的JSON Schema校验_Golang JSON Schema验证示例的详细内容,更多请关注其它相关文章!


# js  # 学校网站建设代理商  # seo到网站运营  # seo实战优化免费咨询  # Seo国外工具  # 抖音达人推广网站是什么  # 绥化企业seo怎么选  # 客户端  # 的是  # 是否符合  # 必填  # 第三方  # 可以通过  # 如何实现  # 如何使用  # golang  # git  # json  # go  # github  # go语言  # 编码  # ai  # 邮箱  # 标准库  # red  # 达芬奇  # 加载  # 潍坊网站建设效果  # 宝安区网站建设维护招聘  # 全网营销推广哪家强  # 网站SEO优化电池充电 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法  MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具  如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】  Lar*el 递归关系中排除指定分支的教程  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航  动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  iCloud登录入口网页版 苹果iCloud官网登录  Composer中的^和~符号代表什么_精通Composer版本号语义化约束  LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理  抖音怎么赚钱_抖音创作者变现方法与途径指南  C++如何实现单例模式_C++设计模式之线程安全的单例写法  12306怎么选座位选到安静区_12306选座安静区域选择策略  Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation  wps文字怎么插入目录并自动更新_wps文字如何插入目录并自动更新方法  Go语言中高效处理x-www-form-urlencoded表单数据  内存疯狂猛猛涨价:主板销量直接腰斩!  响应式图片在网页设计中的正确实现方法  python3时间如何用calendar输出?  探索高级语言到原生C/C++的转译:挑战与内存管理策略  浏览器打开即用 美图秀秀网页版入口  德邦快递查询平台 德邦快递物流信息查询入口  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口  《主播少女的秘密账号迷宫》首支宣传片  铁路12306的积分有效期是多久_铁路12306积分有效期说明  uc浏览器网页版入口 uc浏览器网页版最新网址  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧  海棠电脑版入口_通过电脑访问海棠官网阅读  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  星露谷物语官网入口 星露谷物语游戏官网入口  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  Excel文件在线转换快速入口 Excel在线格式转换网站  Go语言中的*string:深入理解字符串指针  UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS  今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程  Spyder启动失败:字体文件权限拒绝错误解决方案  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  Go语言中JSON数据解码与字段访问指南  理解J*aScript Promise的微任务队列与执行顺序  如何使用Node.js csv 包按条件移除含空字段的CSV记录  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】 

搜索