我在ubuntu 14.04上使用jsoncpp。与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的帮助程序,然后进行查找,但我想知道库本身是否有解决方案。

最佳答案

从设计上看,当值为null时,jsoncpp asInt的行为返回0。也许在使用该值之前进行空检查?

看一看source中的721行。

关于c++ - 在这种情况下如何使jsoncpp抛出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45042712/

10-12 18:49