быстрое json не обнаружено недействительным json - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь сократить такие 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 {}.

Часть стека вызовов из кодового блока:

enter image description here

Сообщение об ошибке текст:

/ 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?

...