该serde_json::to_string()函数将生成一个字符串,其中可能包含nullfor anOption<T>或0for a u32。这使得输出更大,所以我想忽略这些类型的值。
我想简化以下结构的 JSON 字符串输出:
use serde_derive::Serialize; // 1.0.82
#[derive(Serialize)]
pub struct WeightWithOptionGroup {
pub group: Option<String>,
pub proportion: u32,
}
Run Code Online (Sandbox Code Playgroud)
当group是None并且proportion是 0 时,JSON 字符串应该是"{}"
感谢您的回答如何更改 Serde 的默认实现以返回空对象而不是 null?,它可以解决Option问题,但0没有解决方案。
llx*_*xbb 13
链接跳过序列化字段给了我答案。
和固定代码:
#[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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4392 次 |
| 最近记录: |