Как заставить jsoncpp кинуть в этом случае?
Я использую jsoncpp на Ubuntu 14.04. Устанавливается с помощью apt-get libjsoncpp-dev libjsoncpp0. Я не уверен, что это за версия jsoncpp.
У меня была опечатка в ключевом имени (в C++), и было действительно сложно отследить. Рассмотрим этот пример:
#include <iostream>
#include <jsoncpp/json/json.h>
int main(int argc, char** argv) {
Json::Reader reader(Json::Features::strictMode());
Json::Value obj;
std::string json = "{\"mykey\" : 42}";
if (!reader.parse(json.c_str(), obj)) {
std::cout << "JSON parse error" << std::endl;
}
const Json::Value& mykey1 = obj["mykey"];
std::cout << "mykey1:" << mykey1.asInt() << std::endl;
const Json::Value& mykey2 = obj["mykey_typo"];
std::cout << "mykey2:" << mykey2.asInt() << std::endl;
return 0;
}
Я получаю этот вывод:
mykey1:42
mykey2:0
Тот факт, что доступ к несуществующему ключу дает значение 0, пугает меня. Это означает, что при опечатке программа будет просто использовать ноль вместо правильного значения. Я бы предпочел знать, что была опечатка. Есть ли способ заставить jsoncpp выбросить или какой рекомендуемый подход здесь?
Я могу написать помощника, который вызывает isMember, а затем выполняет поиск, но мне было интересно, есть ли решение для самой библиотеки.
1 ответ
По дизайну похоже поведение jsoncpp asInt
возвращает 0, когда значение равно нулю. Возможно сделать нулевую проверку перед использованием значения?
Взгляните на строку 721 в источнике.