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

使用RapidJSON库读写JSON文件时如何保留缩进?

问题

在Visual Studio 2017的Windows平台C++程序中,使用RapidJSON读写JSON文件时,写入的目标文件丢失了所有缩进格式。

原读取代码:

FILE* fp = fopen(inputJson, "rb"); // non-Windows use "r" 
char readBuffer[65536];
FileReadStream is(fp, readBuffer, sizeof(readBuffer));
Document d;
d.ParseStream(is);
fclose(fp);

std::string json_str(readBuffer);

原写入代码:

FILE* fp2 = fopen(outputJson, "wb"); // non-Windows use "w" 
char writeBuffer[65536];
FileWriteStream os(fp2, writeBuffer, sizeof(writeBuffer));
Writer<FileWriteStream> writer(os);
d.Accept(writer);
fclose(fp2);

源文件示例内容:

{
    "name" : "test_rapid",
    "rect_obj": 
    [
        {   "name": "high school mathematics",
            "price": 12,
            "fg_color": 
            {
                "input_type": "val_map_c",
                "input": 
                {   
                    "measname": "MetaData_eOrigin_c",
                    "values":  [0],
                    "mapping": ["white"],
                    "out_of_range" : "white"
                }
            }
        },

写入后的目标文件内容(缩进丢失):

{"name":"test_rapid","rect_obj":[{"name":"high school mathematics","price":12,"fg_color":{"input_type":"val_map_c","input":{
解决方案

RapidJSON默认的Writer会生成紧凑的无格式JSON,要保留缩进格式,需要使用**PrettyWriter**替代Writer,它会自动添加缩进、换行和空格来格式化输出。

修改后的写入代码如下:

FILE* fp2 = fopen(outputJson, "wb"); // non-Windows use "w" 
char writeBuffer[65536];
FileWriteStream os(fp2, writeBuffer, sizeof(writeBuffer));
// 替换Writer为PrettyWriter,可自定义缩进规则
PrettyWriter<FileWriteStream> writer(os);
writer.SetIndent(' ', 4); // 设置每级缩进为4个空格(可选,默认即为4空格)
d.Accept(writer);
fclose(fp2);

补充说明

  • PrettyWriter是Writer的派生类,专门用于生成可读性强的格式化JSON;
  • 若偏好制表符缩进,可将SetIndent的第一个参数改为'\t';
  • 原读取代码中的std::string json_str(readBuffer);存在错误:readBuffer是流的临时缓冲区,并非解析后的完整JSON字符串,若要获取格式化字符串,需通过PrettyWriter写入StringBuffer实现,而非直接读取缓冲区。

内容的提问来源于stack exchange,提问作者RKum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:02:45