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.