jsonschema
A crate for performing fast JSON Schema validation. It is fast due to schema compilation into
a validation tree, which reduces runtime costs for working with schema parameters.
Supports:
- JSON Schema drafts 4, 6, 7 (except some optional test cases);
- Loading remote documents via HTTP(S);
Usage Examples:
A schema can be compiled with two main flavours:
- using default configurations
# use jsonschema::{CompilationError, Draft, JSONSchema};
# use serde_json::json;
# fn foo() -> Result<(), CompilationError> {
# let schema = json!({"maxLength": 5});
let compiled_schema = JSONSchema::compile(&schema)?;
# Ok(())
# }
- using custom configurations (such as define a Draft version)
# use jsonschema::{CompilationError, Draft, JSONSchema};
# use serde_json::json;
# fn foo() -> Result<(), CompilationError> {
# let schema = json!({"maxLength": 5});
let compiled_schema = JSONSchema::options()
.with_draft(Draft::Draft7)
.compile(&schema)?;
# Ok(())
# }
Example (CLI tool to highlight print errors)
use jsonschema::{CompilationError, Draft, JSONSchema};
use serde_json::json;
fn main() -> Result<(), CompilationError> {
let schema = json!({"maxLength": 5});
let instance = json!("foo");
let compiled = JSONSchema::options()
.with_draft(Draft::Draft7)
.compile(&schema)?;
let result = compiled.validate(&instance);
if let Err(errors) = result {
for error in errors {
println!("Validation error: {}", error);
println!("Instance path: {:?}", error.instance_path);
}
}
Ok(())
}