0


开源库nlohmann json使用备忘

nlohmann/json是一个用于解析JSON的开源C++库,口碑一流,无需额外安装其他第三方库,还支持单个头文件模式,使用起来非常方便直观。

1. 编译

从官网https://github.com/nlohmann/json的Release页面下载单个

json.hpp

即可直接使用,无需单独编译。

2. 使用示例

下面以示例的方式罗列nlohmann/json库的基本使用方法。

2.1 生成JSON

方式1

intmain(){using json = nlohmann::json;

    json j;
    j["pi"]=3.141;
    j["happy"]=true;
    j["name"]="Niels";
    j["nothing"]=nullptr;
    j["answer"]["everything"]=42;
    j["list"]={1,0,2};
    j["object"]={{"currency","USD"},{"value",42.99}};// 转成字符串
    std::string strJSON = j.dump(2);// 2个空格的缩进

    std::cout << strJSON;return0;}

输出如下:

{"answer":{"everything":42},"happy":true,"list":[1,0,2],"name":"Niels","nothing":null,"object":{"currency":"USD","value":42.99},"pi":3.141}

方式2

intmain(){using json = nlohmann::json;
    json j ={{"pi",3.141},{"happy",true},{"name","Niels"},{"nothing",nullptr},{"answer",{{"everything",42}}},{"list",{1,0,2}},{"object",{{"currency","USD"},{"value",42.99}}}};// 转成字符串
    std::string strJSON = j.dump(2);

    std::cout << strJSON;return0;}

输出内容与方式1一样。

方式3

intmain(){using json = nlohmann::json;

    json j;
    j["pi"]=3.141;
    j["happy"]=true;
    j["name"]="Niels";
    j["nothing"]=nullptr;

    json j_answer;
    j_answer["everything"]=42;

    j["answer"]= j_answer;

    json j_list = json::array();
    j_list.push_back(1);
    j_list.push_back(0);
    j_list.push_back(2);

    j["list"]= j_list;

    json j_object;
    j_object["currency"]="USD";
    j_object["value"]=42.99;

    j["object"]= j_object;// 转成字符串
    std::string strJSON = j.dump(2);

    std::cout << strJSON;return0;}

输出内容与方式1一样。

2.2 解析JSON

intmain(){using json = nlohmann::json;

    std::string strJSON = u8R"(
    {
        "answer": {
             "everything": 42
        },
        "happy": true,
        "list": [
            1,
            0,
            2
         ],
        "name": "Niels",
        "nothing": null,
        "object": {
            "currency": "USD",
            "value": 42.99
        },
        "pi": 3.141
    }
    )";auto jsonObj = json::parse(strJSON);
    std::cout << jsonObj["pi"].get<float>()<< std::endl;// 3.141
    std::cout << jsonObj["pi"].get<double>()<< std::endl;// 3.141
    std::cout << std::boolalpha << jsonObj["happy"].get<bool>()<< std::endl;// true
    std::cout << jsonObj["name"].get<std::string>()<< std::endl;// Nielsassert(jsonObj["nothing"]==nullptr);
    std::cout << jsonObj["answer"]["everything"].get<int>()<< std::endl;// 42
    std::cout << jsonObj["list"].size()<< std::endl;// 3
    std::cout << jsonObj["list"][0].get<int>()<< std::endl;// 1
    std::cout << jsonObj["list"][1].get<int>()<< std::endl;// 0
    std::cout << jsonObj["list"][2].get<int>()<< std::endl;// 2
    std::cout << jsonObj["object"]["currency"].get<std::string>()<< std::endl;// USD
    std::cout << jsonObj["object"]["value"].get<float>()<< std::endl;// 42.99// 依次输出:// 1// 0// 2for(json::iterator it = jsonObj["list"].begin(); it != jsonObj["list"].end();++it){
        std::cout <<*it << std::endl;}return0;}

3. 异常处理

当解析和生成JSON出错时,nlohmann/json会抛出异常,因此在解析和生成JSON时,需要进行异常捕获。

intmain(){using json = nlohmann::json;

    std::string strJSON = u8R"(
    {
        "pi": 3.141
    }
    )";try{auto jsonObj = json::parse(strJSON);
        std::cout << jsonObj["ppp"].get<float>()<< std::endl;}catch(std::exception& e){
        std::cout << e.what()<< std::endl;}return0;}

4. 判断成员是否存在

intmain(){using json = nlohmann::json;

    std::string strJSON = u8R"(
    {
        "pi": 3.141
    }
    )";auto jsonObj = json::parse(strJSON);
    std::cout << std::boolalpha << jsonObj.contains("pi")<< std::endl;// true
    std::cout << std::boolalpha << jsonObj.contains("ppp")<< std::endl;// falsereturn0;}

欢迎访问我的个人站点:https://jiangxueqiao.com

标签: json windows

本文转载自: https://blog.csdn.net/china_jeffery/article/details/131719613
版权归原作者 china_jeffery 所有, 如有侵权,请联系我们删除。

“开源库nlohmann json使用备忘”的评论:

还没有评论