5

name階層の奥深くにあるオブジェクトの各連絡先を出力したいと考えています。連絡先オブジェクトは、適切な構造を作成するために毎回正確に同じ数のフィールドを持つとは限りません。どうすればこれを達成できますか?

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();
}

私は Rust に非常に慣れておらず、基本的に JavaScript のバックグラウンドから来ています。

4

2 に答える 2