zoukankan      html  css  js  c++  java
  • 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中

  • 相关阅读:
    POJ 1251 Jungle Roads
    1111 Online Map (30 分)
    1122 Hamiltonian Cycle (25 分)
    POJ 2560 Freckles
    1087 All Roads Lead to Rome (30 分)
    1072 Gas Station (30 分)
    1018 Public Bike Management (30 分)
    1030 Travel Plan (30 分)
    22. bootstrap组件#巨幕和旋转图标
    3. Spring配置文件
  • 原文地址:https://www.cnblogs.com/Forever-Kenlen-Ja/p/7123045.html
Copyright © 2011-2022 走看看