jsoncpp是json的一个C++库,github上下载源码的时候结合自己编译器选择下载的版本
1.y.z,
这个分支适应于支持C++11编译器的开发环境;0.y.z,
这个分支适应于还没支持C++11的编译器开发环境;00.11.z
,
这个分支兼容以上两种开发环境。
一、Ubuntu+Qt环境下的编译、安装:
git clone https://github.com/open-source-parsers/jsoncpp.git
cd jsoncpp-master
mkdir build
cmake ..
make
在终端执行如上命令后在 jsoncpp-master/build/lib目录下生成了libjsoncpp_static.a
在Qt工程的pro文件加入jsoncpp库的代码路径和库路径
INCLUDEPATH += /home/gk/Downloads/jsoncpp-master/include/json
INCLUDEPATH += /home/gk/Downloads/jsoncpp-master/src/lib_json
LIBS += /home/gk/Downloads/jsoncpp-master/build/lib/libjsoncpp_static.a
demo:
#include "json.h"
int main()
{
std::string str = R"({"code":0,"message":"success","text_info":{"bottle":[{"bbox":"1734,72,1806,261","conf":"0.83"},{"bbox":"1105,75,1186,259","conf":"0.77"}],"knife":[{"bbox":"1328,94,1383,280","conf":"0.64"}]}})";
Json::Reader reader;
Json::Value root;
reader.parse(str, root);// 把json格式字符串解析到root中
// 获取message字段的字符串,对于不同的数据类型还有asInt、asFloat、asDouble、asBool
std::cout<<root["message"].asString()<<std::endl;
// 当不知道到key的名字是,可以通过getMemberNames函数获取key的集合然后遍历
Json::Value::Members v2 = root["text_info"].getMemberNames();
for(Json::Value::Members::iterator iter=v2.begin(); iter!=v2.end(); ++iter)
{
std::cout<<"class:"<<*iter<<std::endl;
// 由于每个类别按数组格式保存矩形框,因此遍历一下
for(int i=0; i<root["text_info"][*iter].size(); i++)
{
// 每个类别的key是固定的,一个bbox和一个conf,满足条件的输出
Json::Value::Members v3 = root["text_info"][*iter][i].getMemberNames();
if(v3[0]!="bbox" || v3[1]!="conf")
{
continue;
}
std::cout<<"bbox:"<<root["text_info"][*iter][i]["bbox"].asString()<<std::endl;
std::cout<<"conf:"<<root["text_info"][*iter][i]["conf"].asString()<<std::endl;
}
}
return 0;
}
输出:
success
class:bottle
bbox:1734,72,1806,261
conf:0.83
bbox:1105,75,1186,259
conf:0.77
class:knife
bbox:1328,94,1383,280
conf:0.64
二、Windows+Visual Studio环境下的编译、安装:
(1) 用Visual Studio打开下载的jsoncpp解决方案,会看到该解决方案下包含3个项目,如下所示:
我们需要在lib_json项目下分别生成release版本的lib文件,选中lib_json项目:
属性>>配置属性>>C/C++>>代码生成>>运行库,选择“多线程DLL(/MD)”,设置完毕后直接生成即可,release下生成的lib文件保存在makefiles\msvc2010\Release路径(debug版本的json库需要把上面的配置改成“多线程调试 (/MTd)”,这一点尤为注意!)
(2) 回到自己的项目中,把jsoncpp-0.y.z\include\json文件夹拷贝到自己项目,再把上面生成的release版本的lib库放进去设置自己的项目属性:配置属性>>VC++目录>>包含目录加入刚刚新建的json文件夹路径,在配置属性>>C/C++>>代码生成>>运行库,选择“多线程DLL(/MD)”。(同样debug环境设置成“多线程调试 (/MTd)”,否则编译不过!)
上述配置完成后即可编译。