我有一个JSON对象,它包含几个元数据键和一个大的数据负载.我的服务关心用于日志(log)记录和路由的元数据,但不关心有效负载,只关心将有效负载传递给另一个服务.我永远不需要出于任何原因查看有效载荷内部.
现在,有效载荷在我的 struct 中表示为aserde_json::Value
.通过分析,我看到Value
的(反)序列化需要花费大量时间.
Serde中是否有一种机制,可以将有效负载Bundle 在一起,而无需支付将其反序列化为组件值的成本,而只需要在以后重新序列化它们?
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;
#[derive(Serialize, Deserialize)]
struct DataBlob<'a> {
id: &'a str,
priority: u8,
// payload: OpaqueValue,
}
fn main() {
let input = r#"{
"id": "cat",
"priority": 42,
"payload": [1, 2, 3, 4]
}"#;
let parsed = serde_json::from_str::<DataBlob>(input).expect("Could not deserialize");
let output = serde_json::to_string(&parsed).expect("Could not serialize");
assert!(output.contains("payload"));
}