Примеры десериализации Rust & Serde JSON?
Я пытаюсь выяснить, как десериализовать JSON в структуру с помощью Serde. Например, пример JSON на serde_json's документации содержит следующие сведения:
{
"FirstName": "John",
"LastName": "Doe",
"Age": 43,
"Address": {
"Street": "Downing Street 10",
"City": "London",
"Country": "Great Britain"
},
"PhoneNumbers": [
"+44 1234567",
"+44 2345678"
]
}
Теперь, если мы предположим, что вышеуказанные данные находятся в переменной "input" и следующем фрагменте кода:
let deserialized_data: Data = serde_json::from_str(input).unwrap();
... что должно структурировать Data
выглядеть?
1 ответов
большинство стандартных структур данных сериализуемы, поэтому должны работать следующие структуры:
#[derive(Serialize, Deserialize)]
struct Data {
FirstName: String,
LastName: String,
Age: u32,
Address: Address,
PhoneNumbers: Vec<String>
}
#[derive(Serialize, Deserialize)]
struct Address {
Street: String,
City: String,
Country: String
}
если некоторые поля во входных данных могут отсутствовать, то соответствующие поля структуры должны быть Option<T>
вместо T
.
обратите внимание, что поля можно называть более "ржавым" способом, т. е. snake_case, потому что serde поддерживает переименование аннотаций:
#[derive(Serialize, Deserialize)]
struct Address {
#[serde(rename="Street")]
street: String,
#[serde(rename="City")]
city: String,
#[serde(rename="Country")]
country: String
}
этой проблема также относится к полям переименование.