2017-05-12 38 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

令人難以置信的是,這個作品...我想我已經嘗試過這個選項,但一定是犯了一個錯字或什麼的。無論如何,謝謝 –