Я пытаюсь сократить такие json: fpc_buffer == "\" {\\\ "nodeID \\\": \\\ "aa-bb-cc \\\"} \ ""
//-----------------------------------
rapidjson::Document ld_doc;
try {
rapidjson::ParseResult l_ok = ld_doc.Parse(fpc_buffer);
l_errbuf.str(""); l_errbuf.clear(); l_errbuf << ls_where_am<<"JSON parse result: "<<l_ok.Code() << "(" << l_ok.Offset()<<")"; LogMessage(log_debug,l_errbuf.str());
if (!l_ok) {
l_errbuf.str(""); l_errbuf.clear(); l_errbuf << ls_where_am<<"JSON parse error: "<<l_ok.Code() << "(" << l_ok.Offset()<<")";
LogMessage(log_debug,l_errbuf.str()); mi_err=EXIT_FAILURE; return mi_err;
}
} catch (const std::exception& e) {
l_errbuf.str(""); l_errbuf.clear(); l_errbuf << ls_where_am <<"JSON parse exeption : "<<fpc_buffer <<" ";
LogMessage(log_error,l_errbuf.str()); mi_err=EXIT_FAILURE; return mi_err;
}
try {
if ( ld_doc.HasMember("nodeID") ) {
ls_node = ld_doc["nodeID"].GetString();
} else {
throw;
}
} catch (const std::exception& e) { /* */
l_errbuf.str(""); l_errbuf.clear(); l_errbuf << ls_where_am<<"Field \"nodeID\" not found : "<< e.what(); // information from length_error printed
LogMessage(log_error,l_errbuf.str()); mi_err=EXIT_FAILURE; return mi_err;
}
//-----------------------------------
Но arter Parse () в полях l_ok имеют значения код _ == rapid json :: ParseErrorNone и l_ok.offset _ == 0 при выполнении ld_do c .HasMember ("nodeID") или ld_doc ["nodeID «] .GetString (); поднял системное исключение, которое не перехватило мою конструкцию try {} catch {}.
Часть стека вызовов из кодового блока:
Сообщение об ошибке текст:
/ usr / include / rapidjson / document.h: 1078: rapid json :: GenericValue :: ConstMemberIterator rapid json :: GenericValue :: MemberEnd () const [с Encoding = rapid json :: UTF8 <>; Allocator = fast json :: MemoryPoolAllocator <>; rapid json :: GenericValue :: ConstMemberIterator = rapid json :: GenericMemberIterator, rapid json :: MemoryPoolAllocator <>>]: сбой утверждения `IsObject () '.
Как я могу перехватить это jsons?