2017-05-29 534 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