use serde::{Deserialize};
#[derive(Deserialize)]
struct Person {
name: String,
age: i32,
department: String,
}
#[derive(Deserialize)]
struct Company {
name: String,
employees: Vec<Person>,
}
fn main() {
let json_str = r#"{
"name": "Acme Inc",
"employees": [
{
"name": "Alice",
"age": 30,
"department": "Engineering"
},
{
"name": "Bob",
"age": 25,
"department": "Marketing"
}
]
}"#;
let result: Result<Company, serde_json::Error> = serde_json::from_str(json_str);
match result {
Ok(company) => {
println!("Company name: {}", company.name);
for employee in company.employees {
println!("Employee: {}, Age: {}, Department: {}", employee.name, employee.age, employee.department);
}
},
Err(e) => {
eprintln!("Deserialization error: {}", e);
}
}
}
- 首先,通过
serde
库的Deserialize
派生宏为Person
和Company
结构体实现反序列化功能。
- 在
main
函数中,定义一个JSON格式的字符串。
- 使用
serde_json::from_str
函数将JSON字符串反序列化为Company
结构体实例,返回一个Result
类型,其中Ok
变体包含反序列化成功的Company
实例,Err
变体包含反序列化过程中出现的错误。
- 通过
match
语句处理Result
,如果反序列化成功则打印公司和员工信息,失败则打印错误信息。