commit | b2db4d2667c71a1135299ea76215d74586ca6b8a | [log] [tgz] |
---|---|---|
author | sigu-399 <sigu.399@gmail.com> | Mon Jan 05 22:13:31 2015 +0800 |
committer | sigu-399 <sigu.399@gmail.com> | Mon Jan 05 22:13:31 2015 +0800 |
tree | c3baa792cb0f351ece02c0817a8b08758781cf9c | |
parent | 82b384eb55f41a5caf3f35de3ca2b824839bc968 [diff] |
fixing https://github.com/xeipuuv/gojsonschema/issues/44 : JSONLoader interface made public
An implementation of JSON Schema, based on IETF's draft v4 - Go language
References :
go get github.com/xeipuuv/gojsonschema
Dependencies :
package main import ( "fmt" "github.com/xeipuuv/gojsonschema" ) func main() { schemaLoader := gojsonschema.NewReferenceLoader("file:///home/me/schema.json") documentLoader := gojsonschema.NewReferenceLoader("file:///home/me/document.json") result, err := gojsonschema.Validate(schemaLoader, documentLoader) if err != nil { panic(err.Error()) } if result.Valid() { fmt.Printf("The document is valid\n") } else { fmt.Printf("The document is not valid. see errors :\n") for _, desc := range result.Errors() { fmt.Printf("- %s\n", desc) } } }
There are various ways to load your JSON data. In order to load your schemas and documents, first declare an appropriate loader :
loader := gojsonschema.NewReferenceLoader("http://www.some_host.com/schema.json")
loader := gojsonschema.NewReferenceLoader("file:///home/me/schema.json")
References use the URI scheme, the prefix (file://) and a full path to the file are required.
loader := gojsonschema.NewStringLoader(`{"type": "string"}`)
m := map[string]interface{}{"type": "string"}
loader := gojsonschema.NewGoLoader(m)
And
type Root struct {
Users []User `json:"users"`
}
type User struct {
Name string `json:"name"`
}
...
data := Root{}
data.Users = append(data.Users, User{"John"})
data.Users = append(data.Users, User{"Sophia"})
data.Users = append(data.Users, User{"Bill"})
loader := gojsonschema.NewGoLoader(data)
Once the loaders are set, validation is easy :
result, err := gojsonschema.Validate(schemaLoader, documentLoader)
Alternatively, you might want to load a schema only once and process to multiple validations :
schema, err := gojsonschema.NewSchema(schemaLoader) ... result1, err := schema.Validate(documentLoader1) ... result2, err := schema.Validate(documentLoader2) ... // etc ...
To check the result :
if result.Valid() {
fmt.Printf("The document is valid\n")
} else {
fmt.Printf("The document is not valid. see errors :\n")
for _, desc := range result.Errors() {
fmt.Printf("- %s\n", desc)
}
}
gojsonschema uses the following test suite :