将一种格式转码为另一种格式
serde-transcode
crate提供了一种功能,可以从任意Serde Deserializer
转码到任意Serde Serializer
,而无需将整个输入收集到内存中作为中间形式。这提供了一种完全通用的方式,以内存高效的流式方式将任何自描述的 Serde 数据格式转换为任何其他 Serde 数据格式。
例如,您可以将一个 JSON 数据流转码为一个 CBOR 数据流,或者将未格式化的 JSON 转码为其漂亮打印的形式。
这个示例实现了Go的 json.Compact
函数的等效功能,该函数以流式方式从JSON字符串中移除无关的空格。
use std::io; fn main() { // 具有大量空格的 JSON 输入。 let input = r#" { "a boolean": true, "an array": [3, 2, 1] } "#; // JSON 反序列化器。您可以在这里使用任何 Serde Deserializer。 let mut deserializer = serde_json::Deserializer::from_str(input); // 一个紧凑的 JSON 序列化器。您可以在这里使用任何 Serde Serializer。 let mut serializer = serde_json::Serializer::new(io::stdout()); // 将 `{"a boolean":true,"an array":[3,2,1]}` 打印到标准输出。 // 该行适用于任何自描述的 Deserializer 和任何 Serializer。 serde_transcode::transcode(&mut deserializer, &mut serializer).unwrap(); }