Как заставить 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 в источнике.

Другие вопросы по тегам