I want to print the name
of each contact in the object deep down the hierarchy. The contact object may not have the exact same number of fields every time to make a suitable structure. How can I achieve this?
extern crate serde_json;
use serde_json::{Error, Value};
use std::collections::HashMap;
fn untyped_example() -> Result<(), Error> {
// Some JSON input data as a &str. Maybe this comes from the user.
let data = r#"{
"name":"John Doe",
"age":43,
"phones":[
"+44 1234567",
"+44 2345678"
],
"contact":{
"name":"Stefan",
"age":23,
"optionalfield":"dummy field",
"phones":[
"12123",
"345346"
],
"contact":{
"name":"James",
"age":34,
"phones":[
"23425",
"98734"
]
}
}
}"#;
let mut d: HashMap<String, Value> = serde_json::from_str(&data)?;
for (str, val) in d {
println!("{}", str);
if str == "contact" {
d = serde_json::from_value(val)?;
}
}
Ok(())
}
fn main() {
untyped_example().unwrap();
}
I am very new to Rust and basically coming from a JavaScript background.