php json schema,jsonschema

jsonschema golang 实现的高性能jsonschema

benchmark with github.com/qri-io/jsonschema

dcd0217c30bcbdf7b6b7b4463b44e1dc.png

Usage

schema := `

{

"type":"object",

"properties":{

"name":{

"type":"string|number",

"maxLength":5,

"minLength":1,

"maximum":10,

"minimum":1,

"enum":["1","2"],

"replaceKey":"name2",

"formatVal":"string",

"format":"phone"

}

}

}

`

rootSchema := jsonschema.Schema{}

err := json.Unmarshal([]byte(schema), &rootSchema)

if err != nil {

panic(err)

}

js := `

{

"name":"1"

}

`

var o interface{}

err = json.Unmarshal([]byte(js), &o)

if err != nil {

panic(err)

}

fmt.Println(rootSchema.Validate(o))

支持校验器字段。

type 限定字段类型

取值范围:string number bool object array integer

{

"type":"string"

}

或者

{

"type":"string|number"

}

properties

当值为object 时起作用。限定object 中字段的模式,不允许出现properties 中未定义的字段,如果需要允许未定义字段,

可以新增 additionalProperties:true

{

"type":"object",

"properties":{

"name":{

"type":"string"

}

},

"additionalProperties":true

}

maxLength

当字段为string 或者array 类型时起作用,限定string的最大长度。(字节数)或者数组的最大长度

minLength

当字段为string 或者array 类型时起作用,限定string的最小长度。(字节数)或者数组的最小长度

maximum

当字段为数字类型时字作用,限定数字的最大值

minimum

当字段为数字类型时起作用,限定数字的最小值

enum

该值类型为数组。限定值的枚举范围

{

"enum":["1","2","3"]

}

required

该值类型为字符串数组,限定必须存在数组中声明的字段

{

"required":["username","password"]

}

pattern

当字段的值为字符串是起作用,pattern 的值是一个正则表达式,会校验字段是否和该正则匹配

{

"type":"string",

"pattern":"^\\d+$"

}

multipleOf

字段的值为数字时起作用,值必须为 multipleOf 的整倍数

{

"type":"number",

"multipleOf":5

}

items

当字段的值为数组时起作用,用于校验数组中的每一个实体是否满足该items 中定义的模式

{

"type":"array",

"items":{

"type":"object",

"properties":{

"username":{

"type":"string"

}

}

}

}

switch

当switch中的key的值等于case 中的值时,执行case中对应的校验器。如果都不满足,则执行default中的校验器

{

"switch":"name",

"case":{

"name1":{

"required":["age1"]

},

"name2":{

"required":["age2"]

}

},

"default":{

"required":["key3"]

}

}

if

当if 中的校验器没有任何错误时,执行then中的校验器,否则执行else中的校验器。 if中的错误不会抛出

{

"if":{"required":"key1"},

"then":{"required":"key2"},

"else":{"required":"key3"}

}

dependencies

当传了某个值时,必须传某些值

{

"dependencies":{

"key1":["key2","key3"]

}

}

not

not 中的校验器不满足时,会通过。否则不通过

{

"not":{

"type":"string"

}

}

allOf

allOf 中的校验器全部通过才算通过

{

"allOf":[

{

"type":"string"

},{

"maxLength":50

}

]

}

allOf

anyOf 中的校验器任意一个通过就算通过

{

"anyOf":[

{

"type":"string"

},{

"maxLength":50

}

]

}

constVal

参数转换校验器: 参数字段会被 constVal 中的值替代

{

"type":"object",

"properties":{

"name":{

"type":"string",

"constVal":"alen"

}

}

}

defaultVal

参数转换校验器: 参数字段没有时 会添加该字段,值为defaultVal

{

"type":"object",

"properties":{

"name":{

"type":"string",

"defaultVal":"alen"

}

}

}

replaceKey

参数转换校验器: 会复制参数,名重命名为 replaceKey 指定的key

{

"type":"object",

"properties":{

"name":{

"type":"string",

"replaceKey":"alen"

}

}

}

自定义校验器:

实现Validator 接口

实现接口创建函数 NewValidatorFunc

调用函数: RegisterValidator(name string, fun NewValidatorFunc)

type Validator interface {

Validate(c *ValidateCtx, value interface{})

}

type NewValidatorFunc func(i interface{}, path string, parent Validator) (Validator, error)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值