У меня есть код C ++, который анализирует входящее сообщение json с использованием rapidjson.
Полученное сообщение json содержит одну пару ключ: значение («userID»: 100), где значение является целым числом.
Однако, если значение отправляется в виде строки «100», quickjson вывел из строя всю программу со следующей ошибкой:
Invalid response: { "error": "ERR_RATE_LIMIT"}
trading: ../../include/rapidjson/document.h:1737: int rapidjson::GenericValue<Encoding, Allocator>::GetInt() const [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]: Assertion `data_.f.flags & kIntFlag' failed.
/home/ray/dev/trading_execution/src/trading/trading.run.sh: line 39: 2518 Aborted (core dumped) ./trading 1234
Я ожидаю, что rapidjson может справиться с этим более осторожно, чем сбоит программа.
Есть предложения, как справиться с этой ситуацией?Например, есть ли лучший способ обработать ошибку?
Json сообщение:
{
"ctRequestId": "cfa5511f-8c1a-492b-b81a-1462d03bbe99",
"requestType": "generic",
"userID": 100,
}
Код:
userID = getJSONInt(document, "userID");
int getJSONInt(rapidjson::Document& document, const char* memberName)
{
int memberValue;
try
{
if (document.HasMember(memberName))
memberValue = document[memberName].GetInt();
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
}
return memberValue;
}