3

假设以下 JSON:

{
  "person": {
    "first_name": "Ala",
    "last_name": "Makota"
  }
}

是否可以将此对象反序列化为如下结构,跳过"person"

#[derive(Deserialize)]
struct Person {
  first_name: String,
  last_name: String,
}

将 JSON 对象反序列化为包装结构很容易,如下所示:

#[derive(Deserialize)]
struct Object {
  person: Person
}

但就我而言,我只对Person结构感兴趣。

编辑:

虽然我知道我可以使用' serde_json类型Value在 JSON 上进行操作,几乎就像在Mapderive

4

1 回答 1

3

将 json 视为具有“人”键和Person值的映射,可以反序列化为一个HashMap 然后检索该Person值。

let person = r#"
{
    "person": {
      "first_name": "Ala",
      "last_name": "Makota"
    }
  }
"#;

let deserialized = serde_json::from_str::<HashMap<&str, Person>>(&person);

turbo fish ::<HashMap<&str, Person>>被用作一种紧凑的方式来帮助编译器确定反序列化的类型 。

于 2020-02-08T13:33:58.827 回答