jsoncpp安装
jsoncpp是C++用来解析json语言使用的库。可以直接在github上面clone下来。
clone下来的jsoncpp包含CMakeLists.txt,也就是说我们可以使用标准的cmake安装方法:
mkdir build cd build cmake .. make make install
如果你使用了make install ,那么在工程CMakeLists.txt中,可以使用
find_package(jsoncpp REQUIRED) target_link_libraries(main jsoncpp)
安装,另一方面,如果直接将jsoncpp放在了工程目录中,那么CMakeLists.txt可以如下引用:
add_subdirectory(jsoncpp) target_link_libraries(main jsoncpp_lib_static)
CharReaderBuilder的使用
大部分网上的教程都使用了jsoncpp的Reader类,新版的jsoncpp已经废弃了之该类,编译的时候出现如下警告:
note: 'Reader' has been explicitly marked deprecated here JSONCPP_DEPRECATED("Use CharReader and CharReaderBuilder instead") ^ note: expanded from macro 'JSONCPP_DEPRECATED' #define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message)))
我们来看看建议的CharReader 和CharReaderBuilder 该怎么用吧。
首先,CharReader 是一个虚类,是用于自定义解析格式的Reader,我们这里并不能使用。而CharReaderBuilder 则可以直接使用,具体格式也很简单,直接通过一个小程序解释吧:
#include <iostream> #include "json/json.h" #include <fstream> using namespace std; int main() { std::ifstream ifs("configures/config.json"); Json::CharReaderBuilder reader; Json::Value root; JSONCPP_STRING errs; Json::parseFromStream(reader, ifs, &root, &errs); cout<<root["haha"].asInt()<<endl; cout<<root["haha"]["lala"].asInt()<<endl; }
之后的Json::Value 就和更新前的一样,支持字符串下标索引(用于字典),整数下标索引(用于列表)和asInt() 类基本数据类型转换函数。
学习了,我认真看看!
炎热夏天,闲来无事,拜读博客,消暑解闷!