Serdeを使用してJSONを構造体に逆シリアル化する方法を理解しようとしています。たとえば、serde_jsonの 独自のドキュメント のJSONの例には、次のデータが含まれています。
{
"FirstName": "John",
"LastName": "Doe",
"Age": 43,
"Address": {
"Street": "Downing Street 10",
"City": "London",
"Country": "Great Britain"
},
"PhoneNumbers": [
"+44 1234567",
"+44 2345678"
]
}
ここで、上記のデータが変数「入力」と次のコードにあると仮定すると、次のようになります。
let deserialized_data: Data = serde_json::from_str(input).unwrap();
... struct Data
はどのように見えるべきですか?
ほとんどの標準データ構造はシリアライズ可能であるため、次の構造が機能するはずです。
#[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
}
入力のフィールドの一部が欠落している可能性がある場合、対応する構造フィールドはT
だけでなくOption<T>
である必要があります。
Serdeは注釈の名前変更をサポートしているため、フィールドにもっと「さびた」方法で名前を付けることができることに注意してください。つまり、snake_caseです。
#[derive(Serialize, Deserialize)]
struct Address {
#[serde(rename="Street")]
street: String,
#[serde(rename="City")]
city: String,
#[serde(rename="Country")]
country: String
}
This 問題は、フィールドの名前変更にも関連しています。