【问题标题】:Is it possible to deserialize part of a JSON object with serde_json?是否可以使用 serde_json 反序列化部分 JSON 对象?
【发布时间】:2020-05-24 01:45:36
【问题描述】:

假设以下 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_jsonValue 类型在JSON 上进行操作,就像在Map 上一样,但我对利用derive 的可能性特别感兴趣,并且可能归因于实现我的目标。

【问题讨论】:

  • 看来可以用docs.rs/json/0.12.1/json解决
  • @MaxV 在我看来,我可以通过使用serde_jsonValue 类型来实现类似的效果。虽然这是我最终可能会使用的东西,但请查看我的问题的编辑。

标签: json rust serde serde-json


【解决方案1】:

将 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::&lt;HashMap&lt;&amp;str, Person&gt;&gt; 用作帮助编译器确定反序列化类型的紧凑方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2021-01-19
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多