Я хочу проанализировать строку JSON в форме
{
"a": {
"foo": "bar"
},
"b": {
"foo": "baz"
}
}
То есть на верхнем уровне находится ряд объектов JSON, разделенных запятыми. Каждый из этих объектов имеет те же поля, что и другие (то есть я легко могу представить все эти объекты с помощью одной struct
).
Поскольку в строке JSON есть несколько таких объектов, я считаю,Я должен использовать serde_json::StreamDeserializer
, хотя я относительно новичок в Rust и serde
в частности, поэтому, если это неправильный подход, пожалуйста, укажите мне правильное направление.
Этот код представляет то, чтоЯ хочу сделать:
use serde_json::Deserializer;
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct Data {
foo: String,
}
fn main() {
let data = r#"{
"a": {"foo": "bar"},
"b": {"foo": "baz"}
}"#;
let stream = Deserializer::from_str(data).into_iter::<Data>();
for value in stream {
println!("{:?}", value.unwrap());
}
}
Я ожидаю, что этот код выдаст некоторый вывод, похожий на Object({"a": Object({"foo": String("bar")}), "b": Object({"foo": String("baz")})})
.
Это вывод, который я вижу, если я изменяюDeserializer::from_str(data).into_iter::<Data>();
до Deserializer::from_str(data).into_iter::<serde_json::Value>();
.
Вместо этого код не компилируется, выдавая ошибку Error("missing field 'foo'", line: 4, column: 5)
Итак, что мне нужно сделать, чтобы десериализовать JSON в Data
структур, а не Value
?