How can I deserialize JSON with a top-level array using Serde? How can I deserialize JSON with a top-level array using Serde? json json

How can I deserialize JSON with a top-level array using Serde?


You can simply use a Vec:

use serde::{Serialize, Deserialize};#[derive(Serialize, Deserialize, Debug)]struct Foo {    data: String,}fn main() -> Result<(), serde_json::Error> {    let data = r#"[        {            "data": "value1"        },        {            "data": "value2"        },        {            "data": "value3"        }    ]"#;    let datas: Vec<Foo> = serde_json::from_str(data)?;    for data in datas.iter() {        println!("{:#?}", data);    }    Ok(())}

If you wish, you could also use transparent:

#[derive(Serialize, Deserialize, Debug)]#[serde(transparent)]struct Foos {    foos: Vec<Foo>,}let foos: Foos = serde_json::from_str(data)?;

This allows to encapsulate your data with your type.