使用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
相关产品推荐
相关产品推荐

