是否可以使用serde_json反序列化JSON对象的一部分?

时间:2020-02-07 21:57:21

标签: json rust serde serde-json

假设使用以下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的{​​{1}}类型对JSON进行操作,但我对利用{ {1}},也许还有一些属性可以实现我的目标。

1 个答案:

答案 0 :(得分:2)

将json视为具有“ person”键和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>>被用作一种紧凑的方式来帮助编译器确定反序列化的类型。

相关问题