2017-05-29 536 views
0

我創建了一個分析char *的幫助器方法。但是當某些事情失敗時,我想讓它返回一個如Document的空值。我如何爲rapidjson做到這一點? 例如,在jsoncpp中他們有Value::null在rapidjson中返回null或空文檔

Document & CEJsonHelper::parse(const char * inputString) { 
    Document d; 
    auto& document = d.Parse(inputString); 

    if(document.HasParseError()){ 
     auto error = "Failed to parse JSON (offset " + std::to_string(d.GetErrorOffset()) + "). " 
       "Error: " + GetParseError_En(document.GetParseError()); 
     Log(error); 
     return Document::Null; //wrong 
    } 

    return document; 
} 
+0

「Document :: Null」是什麼意思?沒有內容的有效文件? – iehrlich

+0

是的,這是正確的。 – Zammbi

回答

1

據我瞭解的要求,您可以更改最後一行

return d.Parse("{}"); 

如果此代碼可能是頻繁,返回文件並不打算改變(在這種情況下,你更好地將函數的返回值更改爲const Document&),則可能需要在應用程序某處緩存上述表達式的結果,並根據需要將其返回。

更新:另外,我可能是錯的,但RapidJson的更新版本(至少當前穩定的1.1.0)在壞文檔上拋出異常而不是標記錯誤變量。

+0

我從來沒有想過這麼簡單的想法。但看起來像一個黑客。謝謝! – Zammbi

+0

「在壞文檔上拋出異常,而不是標記錯誤變量。」很高興知道。我會仔細檢查那一個。 – Zammbi