serde_json::to_string()函数将生成一个字符串,其中null代表Option<T>0代表u32.这使得输出更大,所以我想忽略这些类型的值.

我想简化以下 struct 的JSON字符串输出:

use serde_derive::Serialize; // 1.0.82

#[derive(Serialize)]
pub struct WeightWithOptionGroup {
    pub group: Option<String>,
    pub proportion: u32,
}

groupNoneproportion是0时,JSON字符串应该是"{}"

感谢你的回答How do I change Serde's default implementation to return an empty object instead of null?,它可以解决Option个问题,但对0来说没有解决方案.

推荐答案

答案是Skip serializing field.

固定代码:

#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Ord, PartialOrd, Eq)]
pub struct WeightWithOptionGroup {
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(default)]
    pub group: Option<String>,
    #[serde(skip_serializing_if = "is_zero")]
    #[serde(default)]
    pub proportion: u32,
}

/// This is only used for serialize
#[allow(clippy::trivially_copy_pass_by_ref)]
fn is_zero(num: &u32) -> bool {
    *num == 0
}

Rust相关问答推荐

在Rust中创建可变片段的可变片段的最有效方法是什么?

rust 蚀将动力特性浇到混凝土 struct 上是行不通的

创建包含缺失值的框架

如何在Rust中表示仅具有特定大小的数组

在决定使用std::Sync::Mutex还是使用Tokio::Sync::Mutex时,操作系统线程调度是考虑因素吗?

闭包不会发送,即使它只捕获发送变量

捕获FnMut闭包的时间不够长

在我的Cargo 中,当我在建筑物中使用时,找不到我可以在产品包中使用的 crate .r我如何解决这个问题?

当发送方分配给静态时,Tokio MPSC关闭通道

如何使用reqwest进行异步请求?

borrow 是由于对 `std::sync::Mutex>` 的解引用强制而发生的

在使用粗粒度锁访问的数据 struct 中使用 RefCell 是否安全?

为什么这个闭包没有实现Fn?

无法将`&Vec>`转换为`&[&str]`

使用 Rust 从 Raspberry Pi Pico 上的 SPI 读取值

从 HashMap>, _> 中删除的生命周期问题

判断对象是 PyDatetime 还是 Pydate 的实例?

如何创建递归borrow 其父/创建者的 struct ?

在 RefCell 上borrow

Cargo:如何将整个目录或文件包含在功能标志中?