在这种情况下如何让 jsoncpp 抛出?

How to make jsoncpp throw in this case?

本文关键字:jsoncpp 抛出 这种情况下      更新时间:2023-10-16

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

看起来 jsoncpp 的行为在值为 null 时asInt返回 0。也许在使用值之前进行空检查?

看看源代码中的第 721 行。