# JSON Parser This Rust crate provides a robust and efficient solution for parsing JSON data into Rust's strongly-typed data structures. It's designed to simplify the process of converting JSON text into Rust types and allows you to validate your JSON data with schema-based validation, making it easier to work with JSON data in Rust applications. ## Features - **Strong Typing**: Leverages Rust's type system to ensure that JSON data is parsed into the correct Rust data structures. - **Error Handling**: Provides comprehensive error handling to catch and manage parsing errors, making your application more robust. - **Schema-Based Validation**: This ensures that the JSON data adheres to a predefined schema, reducing runtime errors, enhancing data integrity and allows you to transform JSON values before validation. ## Getting Started To use this crate in your project, add it to your `Cargo.toml`: ```toml [dependencies] jsonparser = "0.2.1" ``` Then, import it in your Rust file: ```rust use jsonparser::*; ``` ## Basic Usage ### Parsing JSON to Rust To parse a JSON string into a Rust `JSONValue`, use the `from` function provided by the crate: ```rust use jsonparser::JSONParser; let input = r#" { "name": "John Doe", "age": 30, "is_student": false } "#; match JSONParser::from(input) { Ok(json) => println!("{:#?}", json), Err(e) => eprintln!("Failed to parse JSON: {}", e), } ``` ### Accessing Data Once parsed, access the data using the `.get()` method or the indexing syntax for both objects and arrays: ```rust // Using `.get()` method if let Some(name) = json.get("name").and_then(|v| v.as_str()) { println!("Name: {}", name); } // Using indexing syntax let age = &json["age"]; if let Some(age) = age.as_f64() { println!("Age: {}", age); } ``` ### Serialization To serialize a Rust data structure into a JSON string, use the `serialize` method: ```rust use jsonparser::{JSONParser, JSONValue}; let json: JSONValue = JSONParser::from(r#"{ "name": "John Doe", "age": 30, "is_student": false }"#).unwrap(); let serialized = json.serialize(); assert_eq!(serialized, r#"{"name":"John Doe","age":30,"is_student":false}"#); ``` ### Validation To validate a JSONValue, use the `validate` method: ```rust use jsonparser::{JSONParser, JSONValue, JSONSchema, StringType, NumberType, BooleanType}; let json: JSONValue = JSONParser::from(r#"{ "name": "John Doe", "age": 30, "is_student": false }"#).unwrap(); let schema = JSONSchema::new([ ("name", StringType::new().min_length(3).trim().boxed()), ("age", NumberType::new().gt(18).lt(100).boxed()), ("is_student", BooleanType::new().falsy().boxed()), ]); assert!(schema.validate(&json).is_ok()); ``` ## Contribution Contributions are welcome! If you have suggestions for improvements or find any issues, please open an issue or submit a pull request on [GitHub](https://github.com/nethriis/json-parser). ## License This project is licensed under the [Apache-2.0 license](https://github.com/nethriis/json-parser/blob/main/LICENSE).