使用 serde_json 反序列化 JSON 根数组

mat*_*ias 4 json rust serde

根据 JSON 规范,JSON 文档的根可以是对象,也可以是数组。第一种情况很容易通过serde_json使用反序列化struct

#[derive(Deserialize)]
struct Person {
    first_name: String,
    last_name: String,
}

fn main() {
    let s = r#"[{"first_name": "John", "last_name": "Doe"}]"#;

    // this will break because we have a top-level array
    let p: Person = serde_json::from_str(s).unwrap();
    println!("Name: {} {}", p.first_name, p.last_name);
}
Run Code Online (Sandbox Code Playgroud)

但是我找不到任何有关如何反序列化(未命名)数组的文档struct

mat*_*ias 8

我们只需将结果声明为该类型的向量:

let p: Vec<Person> = serde_json::from_str(s).unwrap();
println!("Name: {} {}", p[0].first_name, p[0].last_name);
Run Code Online (Sandbox Code Playgroud)