Serde を使用して、github の Bowserinatorから化学元素の JSON ファイルをデシリアライズしたいと考えています。このために、必要なすべてのフィールドを含む構造を作成し、必要なマクロを派生させました。
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Element {
name: String,
appearance: String,
atomic_mass: f64,
boil: f64,
category: String,
#[serde(default)]
color: String,
density: f64,
discovered_by: String,
melt: f64,
#[serde(default)]
molar_heat: f64,
named_by: String,
number: String,
period: u32,
phase: String,
source: String,
spectral_img: String,
summary: String,
symbol: String,
xpos: u32,
ypos: u32,
}
これは、「null」値を含むフィールドに到達するまでは正常に機能します。たとえば"color": null,
、ヘリウムのフィールドの場合。
表示されるエラー メッセージは{ code: Message("invalid type: unit value, expected a string"), line: 8, column: 17 }
、このフィールドに関するものです。
#[serde(default)]
マクロで実験しました。ただし、これは値がある場合ではなく、JSON ファイルにフィールドがない場合にのみ機能しnull
ます。
Visitor Trait をプログラムすることを避けて、標準のマクロでデシリアライズを行うのが好きです。私が見逃しているトリックはありますか?