在C++库中更优雅的错误处理 - jsoncpp

dje*_*lin 6 c++ error-handling assert fault-tolerance jsoncpp

我不确定这是否是jsoncpp的特定内容或者是如何使C++库表现更好的一般范例.基本上我得到这个痕迹:

imagegeneratormanager.tsk: src/lib_json/json_value.cpp:1176: const Json::Value&     Json::Value::operator[](const char*) const: Assertion `type_ == nullValue || type_ == objectValue' failed.
Run Code Online (Sandbox Code Playgroud)

当输入不好时就会发生这种情况.当输入 - 来自我的另一个应用程序通过memcached - 碰巧是坏的,我想处理这个错误.你知道,优雅.也许类似于"错误:项目15006的输入是坏的"进入日志.不会崩溃我的整个JSON字符串处理任务.

这只是一个写得不好的库还是可以更巧妙地配置它?

编辑:这是一些调用代码:

Json::Value root;
Json::Reader reader;
succeeded = reader.parse(jsonString, root);

if(!succeeded) {
  throw std::runtime_error(std::string("Failed to parse JSON for key ")  + emailInfoKey.str());
}

std::string userEmail = root.get("userId", "").asString();
std::string bodyFilePath = root.get("bodyFilePath", "").asString();
std::string msgId = root.get("msgId", "").asString();
Run Code Online (Sandbox Code Playgroud)

K-b*_*llo 4

根据图书馆参考:

Value & Json::Value::operator[] ( const StaticString & key )

通过名称访问对象值,如果不存在则创建一个 null 成员。

似乎您正在尝试调用operator[]一个非对象,例如整数或字符串get内部使用operator[]。您正在破坏函数前提条件,并且这是代码方面的错误,而不是库方面的错误。Json::Value您可以在使用 访问它之前检查它是否是一个对象isObject()