serde 收集未知字段
假设数据中的 json 只有一些固定字段, 其他字段未知, 你希望在 rust 中定义一个结构体, 将其他未知字段统一收集起来, 以便后面使用.
数据
{ "field_1": "111", "field_2": true, "unknown_1": "xx", ...more unkdown fields }
rust 结构体
use serde::{Serialize, Deserialize}
use serde_json::Value;
pub struct MyType {
pub field_1: String,
pub field_2: bool,
#[serde(flatten)]
pub unkowns: Value
}
此时所有未知字段将会被收集 unknowns
字段(此时字段类型为 Value::Obj
).
当然你也可以将 unkowns
类型设为 Map<String, Value>
, 避免后续使用不必要的 match.
此处的原理在于 使用 serde(flatten)
可以将字段数据展开到父级容器上. 详细说明请参考 flatten