如何在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
相关产品推荐
相关产品推荐

