I have a some JSON data that is returned from a web service. The JSON is a top-level array:
[ { "data": "value1" }, { "data": "value2" }, { "data": "value3" } ]
Using serde_derive
to make struct
s I can can deserialize the data contained within the array, however, I am unable to get Serde to deserialize the top-level array.
Am I missing something, or can Serde not deserialize top level-arrays?
The Hive JSON SerDe is commonly used to process JSON data like events. These events are represented as single-line strings of JSON-encoded text separated by a new line. The Hive JSON SerDe does not allow duplicate keys in map or struct key names.
A common way to deserialize JSON is to first create a class with properties and fields that represent one or more of the JSON properties. Then, to deserialize from a string or a file, call the JsonSerializer. Deserialize method.
Serde is a framework for serializing and deserializing Rust data structures efficiently and generically. The Serde ecosystem consists of data structures that know how to serialize and deserialize themselves along with data formats that know how to serialize and deserialize other things.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With