• jsoncpp的使用


    开源代码地址 github:https://github.com/open-source-parsers/jsoncpp

    使用的时候直接包含.h和.cpp到项目中,也可以编译成lib库来使用。

    json简单字符串解析:

     1 //简单Json
     2 void Config1()
     3 {
     4     Json::Value root;
     5     Json::Reader reader;
     6     std::string str = "{"ip":"127.0.0.1","port":"8080"}";
     7     //
     8     if (!reader.parse(str, root))
     9     {
    10         //error
    11     }
    12     std::ofstream out;
    13     out.open("config1.json", std::ios::binary);
    14     if (out.fail())
    15     {
    16         //error
    17     }
    18     Json::StyledStreamWriter sswriter;
    19     sswriter.write(out, root);
    20     out.close();
    21 }

    生成:

    {
        "ip" : "127.0.0.1",
        "port" : "8080"
    }

    Json嵌套数组,嵌套Json,数组可以通过下标来访问。

    //数组Json
    //嵌套json
    void Config2()
    {
        Json::Value root;
        Json::Reader reader;
        //
        root["name"] = Json::Value("karllen");
        root["age"] = Json::Value("24");
        
        //adress
        Json::Value adrress;
        adrress["province"] = "浙江";
        adrress["city"] = "杭州";
        adrress["district"] = "滨江区";
        root["address"] = adrress;
    
        //hoby array
        Json::Value hobby;
        hobby.append(Json::Value("足球"));
        hobby.append(Json::Value("篮球"));
        hobby.append(Json::Value("乒乓球"));
        root["hobby"] = hobby;
        //
        Json::Value education, education1, education2, education3;
        education1["school"] = Json::Value("大学");
        education1["period"] = Json::Value("2012-09-01~2016-06-01");
        education1["address"] = Json::Value("武汉");
        //
        education2["school"] = Json::Value("高中");
        education2["period"] = Json::Value("2009-09-01~2012-06-01");
        education2["address"] = Json::Value("山东");
        //
        education3["school"] = Json::Value("初中");
        education3["period"] = Json::Value("2006-09-01~2009-06-01");
        education3["address"] = Json::Value("山东");
        //
        education.append(education1);
        education.append(education2);
        education.append(education3);
        root["education"] = education;
        //
        std::ofstream out;
        out.open("config2.json", std::ios::binary);
        if (out.fail())
        {
            //error
        }
        Json::StyledStreamWriter sswriter;
        sswriter.write(out, root);
        out.close();
    }

    生成: 生成的Json由name,age,adress,education,hobby组成,address则是嵌套了一个json格式,education是嵌套了一个Json数组,

    数组有三个Json标示教育阶段,hobby则是嵌套了一个数组,直接标示了内容。如下:

     1 {
     2     "address" : 
     3     {
     4         "city" : "杭州",
     5         "district" : "滨江区",
     6         "province" : "浙江"
     7     },
     8     "age" : "24",
     9     "education" : 
    10     [
    11         {
    12             "address" : "武汉",
    13             "period" : "2012-09-01~2016-06-01",
    14             "school" : "大学"
    15         },
    16         {
    17             "address" : "山东",
    18             "period" : "2009-09-01~2012-06-01",
    19             "school" : "高中"
    20         },
    21         {
    22             "address" : "山东",
    23             "period" : "2006-09-01~2009-06-01",
    24             "school" : "初中"
    25         }
    26     ],
    27     "hobby" : [ "足球", "篮球", "乒乓球" ],
    28     "name" : "karllen"
    29 }

    解析上面的Json文件

     1 //Json读取
     2 //
     3 void Config3()
     4 {
     5     std::ifstream ins;
     6     ins.open("config2.json", std::ios::binary);
     7     if(ins.fail())
     8     {
     9         //error
    10     }
    11     Json::Value root;
    12     Json::Reader reader;
    13     reader.parse(ins, root);
    14     ins.close();
    15     //
    16     std::vector<std::string> vecStrJson;
    17     
    18     vecStrJson.push_back(root["name"].asString());
    19     vecStrJson.push_back(root["age"].asString());
    20 
    21     auto size = root["hobby"].size();
    22     for (auto j = 0; j < size; j++)
    23     {
    24         vecStrJson.push_back(root["hobby"][j].asString());
    25     }
    26 
    27     Json::Value address = root["address"];
    28     vecStrJson.push_back(address["province"].asString());
    29     vecStrJson.push_back(address["city"].asString());
    30     vecStrJson.push_back(address["district"].asString());
    31 
    32     Json::Value education = root["education"];
    33     size = education.size();
    34     for (auto i = 0; i < size; i++)
    35     {
    36         vecStrJson.push_back(education[i]["school"].asString());
    37         vecStrJson.push_back(education[i]["period"].asString());
    38         vecStrJson.push_back(education[i]["address"].asString());
    39     }
    40 }

    将所有的Json值都存到了vecStrJson中

  • 相关阅读:
    sdnu 1513 字符串翻转
    hdu-1559 最大子矩阵(二维树状数组模板题)
    hdu-1556 树状数组
    1049.饭盒
    1092.校门外的树
    1012.区间合并
    1054.数独
    1175.开心的金明 01背包
    空格(Space)的ASCII码值是:32
    js为lable和div赋值
  • 原文地址:https://www.cnblogs.com/Forever-Kenlen-Ja/p/7123045.html
Copyright © 2020-2023  润新知