Nie jestem pewien, czy będzie to specyficzna cecha jsoncpp, czy ogólny paradygmat, jak sprawić, by biblioteka C++ zachowywała się lepiej. Zasadniczo otrzymuję ten ślad:Bardziej zgrabna obsługa błędów w bibliotece C++ - jsoncpp
imagegeneratormanager.tsk: src/lib_json/json_value.cpp:1176: const Json::Value& Json::Value::operator[](const char*) const: Assertion `type_ == nullValue || type_ == objectValue' failed.
To się dzieje, gdy dane wejściowe są złe. Kiedy dane wejściowe - pochodzące z innej aplikacji za pośrednictwem memcached - są złe, chciałbym poradzić sobie z tym błędem. Wiesz, z wdziękiem. Być może coś takiego jak "błąd: dane wejściowe dla pozycji 15006 jest złe" przechodzenie do dziennika. Nie powoduje awarii całego mojego zadania przetwarzania ciągu JSON.
Czy jest to po prostu źle napisana biblioteka, czy też można ją bardziej subtelnie skonfigurować?
Edycja: Oto niektóre kod wywołujący:
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();
Czy mówisz, że nie można sprawdzić typu elementu? –
Może? Nie wiem, czy ten błąd pochodzi z mojego wiersza analizowania, czy z mojego wiersza dostępu, ponieważ nie jest tak, że asserts daje stos wywołań lub niestandardowy komunikat o błędzie lub cokolwiek innego. – djechlin
Nazywasz 'operator []' na wartości, na przykład int lub ciąg. –