This crate provides native JSON syntax for Rust, it brings with a powerful way of parsing JSON syntax into native Rust structs. You can declare the JSON object natively as you do with JavaScript, JSON in Rust was made easy!
Add dependencies to your Cargo.toml
.
toml
[dependencies]
native-json = "1.1"
serde = {version = "1.0", features = ["derive"] }
serde_json = "1.0"
```rust use native_json::json; use std::collections::HashMap; use serde::{Deserialize, Serialize};
fn main() { let mut json = json!{ name: "native json", style: { color: "red", size: 12, bold: true, range: null }, array: [5,4,3,2,1], vector: vec![1,2,3,4,5], hashmap: HashMap::from([ ("a", 1), ("b", 2), ("c", 3) ]);, students: [ {name: "John", age: 18}, {name: "Jack", age: 21}, ], };
// Native access
json.style.size += 1;
json.students[0].age += 2;
// Debug
println!("{:#?}", t);
// Stringify
let text = json.stringify(4);
println!("{}", text);
} ```
With JSON decalre syntax, you can declare nested native JSON object in place.
rust
json!{
JSON_OBJECT_NAME {
name : type,
array: [type],
object: {
name: type,
...
},
...
}}
The native-json will generate native Rust structs for you, each object is named by object hierarchy path, concatenated with underscore.
JSON_OBJECT_NAME.object
was converted to JSON_OBJECT_NAME_object
JSON_OBJECT_NAME.array's item
was converted to JSON_OBJECT_NAME_array_item
```rust use native_json::json; use serde::{Deserialize, Serialize}; use std::collections::HashMap;
json!{ School {
name: String,
students: [
{ name: String, age: u16 },
...
],
map: HashMap
fn main() { let mut school = School::new();
school.name = "MIT".to_string();
school.map.insert("Tom".to_owned(), "Profile".to_owned());
// using initializer
let mut john = School_students_item::new();
john.name = "John".to_owned();
john.age = 18;
school.students.push(john);
// using struct
let jack = School_students_item { name: "Jack".to_string(), age: 21 };
school.students.push(jack);
// show
println!("{:#?}", school);
} ```