在这种情况下如何让 jsoncpp 抛出?
How to make jsoncpp throw in this case?
我在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 行。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 从构造函数抛出异常时如何克服内存泄漏
- GCC对可能有效的代码抛出init list生存期警告
- 如何在文件和行号中抛出错误
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 如何通过参数抛出错误消息
- 函数如何通知用户它基于函数原型抛出异常?
- 为什么 boost::interprocess::managed_shared_memory 在施工时会抛出 boost
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 有没有办法让编译器在我放置字符串而不是 nlohmann::json 对象时抛出错误?
- 编译器错误:destuctor 的更宽松的抛出说明符
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- CppSQLite 抛出"LNK2019: unresolved external symbol"错误
- JsonCpp在退出函数时抛出LogicError
- 在这种情况下如何让 jsoncpp 抛出?
- jsoncpp如何检查标记是否为null.isNull()抛出断言