我正在使用快速json https://rapidjson.org/读取一个json文件,并将其写入到另一个使用cpp on windows应用程序的Windows应用程序,使用的是VisualStudio2017.

文件读取码

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":{

如何保持凹痕?

推荐答案

为了保持缩进,你需要使用PrettyWriter而不是Writer:

FILE* fp2 = fopen(outputJson, "wb"); 
char writeBuffer[65536];
FileWriteStream os(fp2, writeBuffer, sizeof(writeBuffer));
PrettyWriter<FileWriteStream> writer(os);
writer.SetIndent(' ', 4);  // indent with 4 spaces
d.Accept(writer);
fclose(fp2);

Json相关问答推荐

基于两个条件替换扁平化的SON中的值

将嵌套的json中的字符串强制转换为数字

JSON:将项';S键/名称移动到属性中,并使用JQ将其转换为数组

NiFi QueryRecord处理器- Select 可选的JSON属性

无法从JSON解析ZonedDateTime,但可以使用格式化程序很好地解析

有没有办法让serde_json正确/不正确地处理NaN、inf和-inf(IEEE 754特殊标准)?

递归解码嵌套列表(具有任意深度的列表列表)

Jolt 变换以展平 json 字符串数组

如何使用SQLite Trigger将JSON对象数组转换为新记录?

将boost::beast::multibuffer转换为std::istream

无法在Kotlin 中解析JSONObject

如何使用 boost::json::value 调用无参数函数

如何使用 ConfigurationBuilder 解析现有的 json 字符串(不是文件)

Powershell JSON 操作

如何从 rails 中的 respond_to 方法生成 json?

从 JSON 对象中删除键值对

将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确

jQuery fullcalendar 发送自定义参数并使用 JSON 刷新日历

Javascript:如何判断 AJAX 响应是否为 JSON

case 类只有一个字段时如何将json转为 case 类