有没有办法删除使用 serde 序列化的结构中的 None 字段?

unh*_*sum 3 rust serde

我正在尝试从 MongoDB 获取用户信息,如下所示:

\n
pub async fn find_user_by_name(&self, data: String) -> Vec<Uye> {\n    let filter = doc! {"isim": data};\n    let options = FindOptions::builder()\n        .projection(doc! {"sifre": 0, "mail": 0, "tokenInfo": 0 })\n        .build();\n    let cursor = match self.user_col.find(None, options).await {\n        std::result::Result::Ok(cursor) => cursor,\n        std::result::Result::Err(_) => return vec![],\n    };\n\n    cursor.try_collect().await.unwrap()\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我的 Uye 结构是:

\n
pub struct Uye {\n    pub id: Option<i32>,\n    pub isim: Option<String>,\n    pub sifre: Option<String>,\n    pub mail: Option<String>,\n    pub dogumtarihi: Option<String>,\n    pub avatar_url: Option<String>,\n    pub kaydedilen: Option<Vec<i32>>,\n    pub perm: Option<String>,\n    pub permLevel: Option<i32>,\n    pub onaylandi: Option<bool>,\n    pub isDummy: Option<bool>,\n    pub hesap_onay_kodu: Option<i32>,\n    pub avatar_path: Option<String>,\n    pub tokenInfo: Option<TokenInfo>,\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当我通过http请求从API获取数据时,结果是这样的:

\n
{\n  "status": "basarili",\n  "user": [\n    {\n      "id": 60,\n      "isim": "test User",\n      "sifre": null, // <-----\n      "mail": null, // <-----\n      "dogumtarihi": "",\n      "avatar_url": "/static/uploads/images/avatar",\n      "kaydedilen": [],\n      "perm": "\xc3\x9cye",\n      "permLevel": 0,\n      "onaylandi": false,\n      "isDummy": false,\n      "hesap_onay_kodu": 123123,\n      "avatar_path": "/static/uploads/images/avatar",\n      "tokenInfo": null // <-----\n    }\n  ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我想从对象中删除空字段以使其看起来更好。有什么办法吗?

\n

Cae*_*sar 6

你的结构中有很多字段。可能值得使用serde_with板条箱:

#[serde_with::skip_serializing_none]
#[derive(Serialize)]
pub struct Uye {
    pub id: Option<i32>,
    pub isim: Option<String>,
    // ...
}
Run Code Online (Sandbox Code Playgroud)