Spl*_*nes 2 rust deserialization
给定一个简单的向量向量,我可以利用实现该特征的usize事实,因此使用格式化程序来漂亮地打印它(请参阅游乐场):VecDebug{:?}
let mut hierarchy: Vec<Vec<usize>> = Vec::new();
hierarchy.push(vec![0,1,2,3]);
hierarchy.push(vec![0,1]);
println!("Hierarchy: {:?}", hierarchy);
Run Code Online (Sandbox Code Playgroud)
假设我将 的输出写入println!(...)文件。以后如何轻松反序列化它?
例如我的文件如下所示:
[[0,1,2,3],[0,1]]
Run Code Online (Sandbox Code Playgroud)
使用serde,我可以序列化我的数据类型并将其存储为(例如)JSON 文件。但是,我不需要任何“花哨”的数据格式,只需要这种简单的向量向量。是否有任何简单的解决方案可以根据Debug特征进行反序列化(“反转打印”)?是否有比手动执行所有解析器逻辑更简单的选择,例如逐字符读取文件以查找[,]和,?
请勿将此Debug特征用于此目的。它不保证它是可解析的,或者它对任何目的都有用。
\n\n派生
\nDebug格式不稳定,因此可能会随着未来的 Rust 版本而改变。此外,Debug标准库提供的类型的实现(std、core、alloc等)并不稳定,也可能随着未来的 Rust 版本而改变。
\xe2\x80\x94std::fmt::Debug特征文档
例如,有人建议使用一个编译选项,该选项根本Debug不打印任何内容,以避免在优先考虑代码大小时生成格式化代码。这可能会发生,也可能不会发生,但它是允许发生的;(不幸的是,我找不到我记得的最近一个链接;这是一个较旧的链接。)
serde_json是解决这个问题的一个完美的方法:
fn main() {\n let mut hierarchy: Vec<Vec<usize>> = Vec::new();\n hierarchy.push(vec![0, 1, 2, 3]);\n hierarchy.push(vec![0, 1]);\n serde_json::to_writer(std::io::stdout(), &hierarchy).unwrap();\n}\nRun Code Online (Sandbox Code Playgroud)\n将打印[[0,1,2,3],[0,1]]. 您不需要任何设置。
如果您关心使用更多类似 Rust 的语法,您可以使用ron,一个使用类似 Rust 表示法的通用序列化器;或者uneval生成实际的 Rust 代码,但您需要一个 Rust 编译器来“反序列化”它。
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |