jsoncpp在Ubuntu和Windows下的编译与使用

2 篇文章 0 订阅

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)”,否则编译不过!)

 

上述配置完成后即可编译。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值