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

使用RapidJSON将含空格JSON序列化为单行字符串的问题

解决RapidJSON序列化单行JSON时保留空格的问题

核心说明

RapidJSON默认的Writer生成的紧凑单行JSON,会自动保留字符串值内部的空格(比如你示例中"123 Main St"里的空格)。你觉得空格被忽略,大概率是混淆了JSON结构上的缩进/分隔空格(紧凑格式会去掉这些)和字符串内容里的空格(这些会被完整保留)。

如果你的需求仅为保留字符串内容里的空格,那你现有的代码其实已经满足要求,运行后输出的单行JSON中,字符串内的空格会被正确保留。

若需保留结构空格的单行JSON

如果还希望在单行JSON中保留结构上的空格(比如"name": "John"里冒号后、逗号后的空格),可以使用PrettyWriter并修改格式化选项,禁用换行和缩进,只保留必要的结构空格:

#include <iostream>
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
#include "rapidjson/prettywriter.h"
using namespace rapidjson;

int main() {
    const char* json = R"(
        {
            "name": "John",
            "age": 30,
            "address": {
                "street": "123 Main St",
                "city": "New York",
                "country": {
                    "street": "123 Main St",
                    "city": "New York",
                    "country": {
                        "street": "123 Main St",
                        "city": "New York",
                        "country": "USA"
                    }
                }
            }
        }
    )";

    Document document;
    document.Parse(json);

    StringBuffer buffer;
    // 使用PrettyWriter并配置格式
    PrettyWriter<StringBuffer> writer(buffer);
    writer.SetIndent(' ', 0); // 关闭缩进
    writer.SetFormatOptions(kFormatSingleLine); // 强制单行输出

    document.Accept(writer);
    std::cout << buffer.GetString() << std::endl;

    return 0;
}

这段代码的输出会是类似:

{"name": "John", "age": 30, "address": {"street": "123 Main St", "city": "New York", "country": {"street": "123 Main St", "city": "New York", "country": {"street": "123 Main St", "city": "New York", "country": "USA"}}}}

既保持单行,又保留了结构上的空格和字符串内容里的空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:22:26