2017-05-12 35 views
1

我有以下C++代码来生成的JSON字符串:C++ RapidJSON清除写入字符串

StringBuffer JSONData; 
PrettyWriter<StringBuffer> writer(JSONData); 
writer.StartObject(); 
writer.String("hello"); 
writer.String("world"); 
writer.String("t"); 
writer.Bool(true); 
writer.String("f"); 
writer.Bool(false); 
writer.String("n"); 
writer.Null(); 
writer.String("i"); 
writer.Uint(123); 
writer.String("pi"); 
writer.Double(3.1416); 
writer.EndObject(); 

cout << JSONData.GetString() << endl; 
//OUTPUTS: 
{ 
    "hello": "world", 
    "t": true, 
    "f": false, 
    "n": null, 
    "i": 123, 
    "pi": 3.1416, 
} 


JSONData.Clear(); 
writer.Reset(JSONData); //Wont compile 
writer.StartObject(); //FAILS !Base::hasRoot_ 
writer.String("hello"); 
writer.String("world"); 
writer.String("t"); 
writer.Bool(true); 
writer.EndObject(); 
cout << JSONData.GetString() << endl; 

然而,我想创建另一个JSON对象余输出的先前的JSON数据之后。然而,这返回给我错误Assertion failed: !Base::hasRoot_。我怎样才能解决这个问题?

回答

1

This linkPrettyWriter的RapidJSON标头。你可以在第247行找到你遇到的错误。我不是rapidJSON专业人士,但我认为一个作家只能为一个对象工作,即使你清除了它。我知道这不是一个完整的答案,但认为这将是一个暗示。

另外,this链接可以给你提示如何使用PrettyWriter

您可能想要使用reset(),RapidJSON documentation可以提供帮助。

此函数使用新的流和默认设置重置编写器,以便使Writer对象可重复使用以输出多个JSON。

这非常文档提供了下面的例子:

Writer<OutputStream> writer(os1); 
writer.StartObject(); 
// ... 
writer.EndObject(); 
writer.Reset(os2); 
writer.StartObject(); 
// ... 
writer.EndObject(); 

你可以尝试这样的事:

StringBuffer JSONData; 
PrettyWriter<StringBuffer> writer(JSONData); 
writer.StartObject(); 
// ... 
writer.EndObject(); 

JSONData.Clear(); 
writer.Reset(JSONData); 
writer.StartObject(); 
// ... 
writer.EndObject(); 

你甚至可以创建其他输出流,并将其解析到复位,只是确定..

+0

是的,但我无法让重置工作......它不会编译我所做的任何事 –

+0

@TVAvanHeste仁我用一个例子编辑我的答案 – Badda

+0

令人难以置信的是,这个作品...我想我已经尝试过这个选项,但一定是犯了一个错字或什么的。无论如何,谢谢 –