通过jsoncpp库的CharReaderBuilder解析字符串

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() 类基本数据类型转换函数。

《通过jsoncpp库的CharReaderBuilder解析字符串》有3个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据