如何让serde_json::to_writer_pretty使用制表符而非2空格缩进?
修改serde_json的to_writer_pretty缩进为制表符
问题描述
我现在用serde_json::to_writer_pretty生成格式化后的JSON文件,但它默认用2空格缩进。因为有另一个工具生成的JSON是制表符缩进的,为了方便文件对比,我需要把这个方法的缩进改成制表符,请问该怎么改?
现有代码如下:
let file = std::fs::File::create(&path).expect("Failed to create json file"); let mut w = BufWriter::new(file); serde_json::to_writer_pretty(&mut w, &data).expect("Failed to write to json file");
解决方案
不能直接用to_writer_pretty的默认调用,需要手动创建自定义的PrettyFormatter,指定缩进为制表符("\t"),再搭配Serializer完成序列化。
修改后的完整代码:
use serde_json::ser::{PrettyFormatter, Serializer}; use std::io::BufWriter; // 原文件创建逻辑保持不变 let file = std::fs::File::create(&path).expect("Failed to create json file"); let mut w = BufWriter::new(file); // 创建自定义格式化器,设置缩进为制表符 let formatter = PrettyFormatter::with_indent(b"\t"); // 初始化序列化器并执行序列化操作 let mut serializer = Serializer::new(w, formatter); data.serialize(&mut serializer).expect("Failed to write to json file");
关键说明
PrettyFormatter::with_indent方法接受字节切片参数,传入b"\t"即可将缩进替换为制表符- 这套写法和原生
to_writer_pretty的功能完全一致,仅修改了缩进规则,能完美适配原有逻辑
内容的提问来源于stack exchange,提问作者Adamarla
相关产品推荐
相关产品推荐

