You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:40:56