jsonschema-rs 快速开始:5分钟掌握 Rust 高性能 JSON Schema 验证

jsonschema-rs 快速开始:5分钟掌握 Rust 高性能 JSON Schema 验证 jsonschema-rs 快速开始5分钟掌握 Rust 高性能 JSON Schema 验证【免费下载链接】jsonschema-rsA high-performance JSON Schema validator for Rust项目地址: https://gitcode.com/gh_mirrors/js/jsonschema-rs想要为你的 Rust 应用添加强大的 JSON 数据验证功能吗jsonschema-rs 是一个高性能的 JSON Schema 验证库支持多种 JSON Schema 草案提供编译时和运行时两种验证方式。无论你是处理 API 请求、配置文件验证还是数据转换jsonschema-rs 都能帮你轻松实现数据验证。 为什么选择 jsonschema-rs在开始之前让我们先了解这个库的核心优势⚡ 极致性能比同类 Rust 库快 2-5000 倍编译时验证更是快 3-13 倍 全面支持支持 Draft 4、6、7、2019-09、2020-12 等多个 JSON Schema 草案 灵活扩展支持自定义关键字和格式验证器 远程引用支持同步和异步的远程引用获取网络/文件 多语言绑定提供 Python 和 Ruby 绑定支持 WebAssembly 快速安装在你的Cargo.toml中添加依赖[dependencies] jsonschema 0.47 serde_json 1.0如果需要编译时验证功能启用macros特性[dependencies] jsonschema { version 0.47, features [macros] } serde_json 1.0 5分钟快速上手1. 基础验证一次性验证最简单的验证方式是使用is_valid或validate函数use serde_json::json; fn main() - Result(), Boxdyn std::error::Error { // 定义 JSON Schema let schema json!({ type: object, properties: { name: {type: string}, age: {type: integer, minimum: 0} }, required: [name] }); // 要验证的数据 let valid_data json!({name: Alice, age: 25}); let invalid_data json!({age: -5}); // 快速验证 assert!(jsonschema::is_valid(schema, valid_data)); assert!(!jsonschema::is_valid(schema, invalid_data)); // 获取验证结果 match jsonschema::validate(schema, invalid_data) { Ok(_) println!(验证通过), Err(err) println!(验证失败: {}, err), } Ok(()) }2. 高性能验证器重复使用如果你需要多次验证相同 Schema 的数据应该使用验证器use serde_json::json; fn main() - Result(), Boxdyn std::error::Error { let schema json!({ type: string, maxLength: 10 }); // 创建验证器一次性构建多次使用 let validator jsonschema::validator_for(schema)?; // 验证多个数据 let data1 json!(hello); let data2 json!(这个字符串太长了); println!(数据1验证: {}, validator.is_valid(data1)); // true println!(数据2验证: {}, validator.is_valid(data2)); // false // 获取详细错误信息 for error in validator.iter_errors(data2) { println!(错误: {}, error); println!(位置: {}, error.instance_path()); } Ok(()) }3. 编译时验证最高性能如果你的 Schema 在编译时已知使用宏可以获得最佳性能use serde_json::json; #[jsonschema::validator(schema r#{ type: object, properties: { email: {type: string, format: email}, score: {type: number, minimum: 0, maximum: 100} }, required: [email] }#)] struct UserValidator; fn main() - Result(), Boxdyn std::error::Error { let user1 json!({email: userexample.com, score: 85}); let user2 json!({email: invalid-email, score: 120}); // 编译时验证器性能最高 println!(用户1: {}, UserValidator::is_valid(user1)); // true println!(用户2: {}, UserValidator::is_valid(user2)); // false // 详细验证 UserValidator::validate(user1)?; // 成功 UserValidator::validate(user2)?; // 返回错误 Ok(()) } 常用验证场景验证用户注册数据use serde_json::json; let registration_schema json!({ type: object, properties: { username: { type: string, minLength: 3, maxLength: 20, pattern: ^[a-zA-Z0-9_]$ }, email: {type: string, format: email}, password: { type: string, minLength: 8, pattern: ^(?.*[A-Z])(?.*[a-z])(?.*\\d).$ }, age: {type: integer, minimum: 18, maximum: 120} }, required: [username, email, password], additionalProperties: false });验证 API 响应格式use serde_json::json; let api_response_schema json!({ type: object, properties: { success: {type: boolean}, data: { type: object, properties: { id: {type: integer}, name: {type: string}, created_at: {type: string, format: date-time} }, required: [id, name] }, error: {type: [string, null]} }, required: [success] });验证配置文件use serde_json::json; let config_schema json!({ $schema: http://json-schema.org/draft-07/schema#, type: object, properties: { server: { type: object, properties: { port: {type: integer, minimum: 1, maximum: 65535}, host: {type: string, format: hostname} }, required: [port] }, database: { type: object, properties: { url: {type: string, format: uri}, pool_size: {type: integer, minimum: 1, maximum: 100} }, required: [url] } }, required: [server, database] }); 高级功能自定义格式验证器use jsonschema::{draft202012, ValidationOptions}; use serde_json::json; fn main() - Result(), Boxdyn std::error::Error { let schema json!({ type: string, format: custom-format }); let options draft202012::options() .with_format(custom-format, |value| { // 自定义验证逻辑 value.as_str().map_or(false, |s| s.starts_with(custom_)) }) .build(schema)?; let validator options.validator(); println!(验证结果: {}, validator.is_valid(json!(custom_value))); // true println!(验证结果: {}, validator.is_valid(json!(normal_value))); // false Ok(()) }异步远程引用use serde_json::json; #[cfg(feature resolve-async)] async fn validate_with_remote_reference() - Result(), Boxdyn std::error::Error { let schema json!({ $ref: https://example.com/schema.json }); // 异步获取远程引用 let validator jsonschema::async_validator_for(schema).await?; // 验证数据 let data json!({name: Test}); assert!(validator.is_valid(data)); Ok(()) } 性能对比jsonschema-rs 在性能方面表现出色场景jsonschema-rs其他库提升倍数复杂 Schema最快valico/jsonschema_valid75-645x递归 Schema最快boon5000x编译时验证最快运行时验证3-13x️ 命令行工具jsonschema-rs 还提供了命令行工具可以通过 crates/jsonschema-cli 使用# 安装命令行工具 cargo install jsonschema-cli # 验证 JSON 数据 jsonschema-cli schema.json -i data.json # 批量验证 jsonschema-cli schema.json -i data1.json data2.json data3.json 项目结构了解项目结构有助于更好地使用 jsonschema-rscrates/jsonschema- 核心验证库crates/jsonschema-macros- 编译时验证宏crates/jsonschema-cli- 命令行工具crates/jsonschema-py- Python 绑定crates/jsonschema-rb- Ruby 绑定 常见问题Q: 如何启用格式验证A: 默认情况下格式验证是关闭的草案依赖需要显式启用let validator jsonschema::draft202012::options() .should_validate_formats(true) .build(schema)?;Q: 支持哪些 JSON Schema 草案A: 支持 Draft 4、6、7、2019-09、2020-12可以通过 Bowtie Report 查看详细兼容性。Q: 如何自定义错误信息A: 使用validator.iter_errors()遍历所有错误每个错误都包含详细的位置和描述信息。Q: 最小支持的 Rust 版本是多少A: 需要 Rust 1.85.0 或更高版本。 开始使用吧现在你已经掌握了 jsonschema-rs 的核心功能这个高性能的 JSON Schema 验证库能够帮助你✅ 快速验证 API 请求和响应数据✅ 确保配置文件格式正确✅ 在编译时捕获数据格式错误✅ 提供详细的验证错误信息✅ 支持多种 JSON Schema 草案无论是构建 Web API、验证配置文件还是处理复杂的数据转换jsonschema-rs 都能提供强大而高效的验证能力。立即尝试让你的 Rust 应用数据验证更加可靠✨【免费下载链接】jsonschema-rsA high-performance JSON Schema validator for Rust项目地址: https://gitcode.com/gh_mirrors/js/jsonschema-rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考