Можно ли десериализовать часть объекта JSON с помощью serde_ json? - PullRequest
1 голос
/ 08 февраля 2020

Допустим следующее 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 структура.

РЕДАКТИРОВАТЬ:

Хотя я знаю, что могу использовать Value тип *1019* для работы на JSON почти так же, как на Map, меня особенно интересует возможность использования derive и, возможно, атрибуты для достижения моей цели.

1 Ответ

1 голос
/ 08 февраля 2020

Думая о 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 fi sh ::<HashMap<&str, Person>> используется как компактный способ помочь компилятору определить тип десериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...