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

如何在C++中使用rapidjson::Writer不创建Document生成指定JSON

用rapidjson::Writer直接生成目标JSON(无需Document对象)

核心是严格按照JSON的层级结构调用Writer的流式API,只要正确嵌套StartObject()/EndObject()、指定Key()并写入对应类型的值,就能生成完整的JSON,无需先构建Document对象。

完整实现代码

#include <iostream>
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"

using namespace rapidjson;

int main() {
    // 初始化输出缓冲区与Writer实例
    StringBuffer outputBuffer;
    Writer<StringBuffer> jsonWriter(outputBuffer);

    // 构建最外层对象
    jsonWriter.StartObject();
    
        // 写入"data"键,开启其嵌套对象
        jsonWriter.Key("data");
        jsonWriter.StartObject();
        
            // 构建dataIn子对象
            jsonWriter.Key("dataIn");
            jsonWriter.StartObject();
                jsonWriter.Key("hello"); jsonWriter.String("world");
                jsonWriter.Key("t"); jsonWriter.Bool(true);
                jsonWriter.Key("f"); jsonWriter.Bool(false);
            jsonWriter.EndObject(); // 闭合dataIn对象
            
            // 构建dataOut子对象
            jsonWriter.Key("dataOut");
            jsonWriter.StartObject();
                jsonWriter.Key("n"); jsonWriter.Null();
                jsonWriter.Key("i"); jsonWriter.Int(123);
                jsonWriter.Key("pi"); jsonWriter.Double(3.1416);
            jsonWriter.EndObject(); // 闭合dataOut对象
            
        jsonWriter.EndObject(); // 闭合data对象
    jsonWriter.EndObject(); // 闭合最外层对象

    // 输出最终JSON文本
    std::cout << outputBuffer.GetString() << std::endl;
    return 0;
}

关键注意事项

  • 必须保证StartObject()和EndObject()的调用次数严格匹配,每开启一个对象就要对应闭合一个,否则会生成不完整或格式错误的JSON
  • 每个键值对需先调用Key()指定键名,再调用对应类型的写入方法(如String()/Bool()/Int()等)
  • 除了StringBuffer,还可以使用FileWriteStream直接将JSON写入文件,适配不同输出场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:41:23