MST
星途 面试题库

面试题:Rust serde库在复杂嵌套结构体反序列化中的应用

有一个复杂的嵌套结构体,例如`Company`结构体包含`name`(字符串类型),`employees`是一个`Vec<Person>`,`Person`结构体又包含`name`(字符串类型)、`age`(整型)和`department`(字符串类型)。请编写代码,使用`serde`库将一个JSON字符串反序列化为这个`Company`结构体实例,同时处理可能出现的反序列化错误。
40.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
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);
        }
    }
}
  1. 首先,通过serde库的Deserialize派生宏为PersonCompany结构体实现反序列化功能。
  2. main函数中,定义一个JSON格式的字符串。
  3. 使用serde_json::from_str函数将JSON字符串反序列化为Company结构体实例,返回一个Result类型,其中Ok变体包含反序列化成功的Company实例,Err变体包含反序列化过程中出现的错误。
  4. 通过match语句处理Result,如果反序列化成功则打印公司和员工信息,失败则打印错误信息。