使用C/C++解析json文件



为什么?

       举个例子,我们在使用C/C++进行深度学习模型的测试,由于测试过程中可能有许多参数要传给model,比如在进行目标检测时,要传入nms阈值等。我们要最优化测试结果,这类参数需要不断的调整,如果我们把这类参数的值写在C/C++代码中,每次修改都要重新进行make,这样十分麻烦。
       我们可以将这些参数写在一个json文件中,在C/C++代码中解析json文件,读取出参数。这样,我们每次修改参数的值,不需要重新进行make,省时省力。

怎么做?

  • 安装jsoncpp
sudo apt-get install libjsoncpp-dev

       安装后,头文件在“/usr/include/jsoncpp/json"下,动态库文件在"/usr/lib/x86_64-linux-gnu/libjsoncpp.so.1.7.2"

  • 修改CMakeLists

       在CMakeLists中要加入jsoncpp的头文件路径和动态库路径。具体如下:

SET(JSONCPP_INCLUDE /usr/include/)
SET(JSONCPP_LIBS /usr/lib/x86_64-linux-gnu/libjsoncpp.so.1.7.2)

SET(INCLUDES_DIRS ${JSONCPP_INCLUDE})
SET(LIBS ${JSONCPP_LIBS})

INCLUDE_DIRECTORIES(${INCLUDES_DIRS} 
LINK_LIBRARIES(${LIBS})

       假设我们的json文件长这样:
{
  "model1": {
    "model_path": "../path1/path2/xxx.model",
    "batch_size": 1,
    "nms_threshold": 0.8
  }
}

       我们可以使用如下代码读出这三个参数的值:

#include <fstream>
#include <sstream>
#include <iostream>
#include <jsoncpp/json/json.h>

void parse_json()
{
    std::string path = "../params.json";
    std::ifstream fin;
    fin.open(path, std::ios::binary);

    Json::Reader reader;
    Json::Value root;
    if(reader.parse(fin, root, false))
    {
        std::string model_path = root["model1"]["model_path"].asString();
        int batch_size = root["model1"]["batch_size"].asInt();
        float nms_threshold = root["model1"]["nms_threshold"].asFloat();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值