faceair / jio Goto Github PK
View Code? Open in Web Editor NEWjio is a json schema validator similar to joi
License: MIT License
jio is a json schema validator similar to joi
License: MIT License
It might be good have multiple errors for fields. Right now validation return error message only about one field, not all failed.
Using the README example with a small change (add optional "foo") will result in the Without()
being ignored. This is because AnySchema.Optional() calls ctx.Skip():
package main
import (
"fmt"
"log"
"github.com/faceair/jio"
)
func jioNotAllowed(ctx *jio.Context) {
ctx.Abort(fmt.Errorf("Attribute `%s` not allowed in this context.", ctx.FieldPath()))
return
}
func main() {
data := []byte(`{
"debug": "on",
"window": {
"title": "Sample Widget",
"size": [500, 500]
}
}`)
_, err := jio.ValidateJSON(&data, jio.Object().Keys(jio.K{
"debug": jio.Bool().Truthy("on").Required(),
"window": jio.Object().Keys(jio.K{
"title": jio.String().Min(3).Max(18),
"size": jio.Array().Items(jio.Number().Integer()).Length(2).Required(),
"foo": jio.Any(),
}).Without("name", "title").Required(),
}))
if err != nil {
panic(err)
}
log.Printf("%s", data)
}
This results in no errors, even though we should expect "panic: field window
contains title"
If you remove the "foo" line, it works correctly:
panic: field `window` contains title
The problem is in the ObjectSchema.Keys()
- it needs to set ctx.skip to false after the for loop.
package main
import (
"bytes"
"log"
"github.com/faceair/jio"
)
func main() {
orig := []byte(`{}`)
data := []byte(`{}`)
schema := jio.Object().Keys(jio.K{
"foo": jio.String(),
})
if _, err := jio.ValidateJSON(&data, schema); err != nil {
log.Fatal(err)
}
if !bytes.Equal(orig, data) {
log.Printf("Want %s, got %s.", orig, data)
}
}
prints
Want {}, got {"foo":null}.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.