jsoncpp構建及解析複雜數組

1、示例的json格式

在這裏插入圖片描述

2、測試代碼

使用的版本jsonjson_0.10.7

void test_video_list()
{
    Json::Value root;
    Json::Value calss_info;
    Json::FastWriter writer;
    Json::Value PointInfo;
    
    char* device = "device";
    char* status = "status";

    root[device]      = "test1";   /* key值可以用char*或直接是字符串常量 */
    root[status]      = "0";
    root["total_num"] = "2";

    calss_info["seq"] = "1";
    calss_info["class_addr"]="rtmp://192.168.1.252/test/chan1";
    calss_info["class_info"]["class"] = "氧化反應1";
    calss_info["class_info"]["section"] = "高中";
    calss_info["class_info"]["grade"]      = "高一";
    calss_info["class_info"]["teacher"]    = "陳海";
    calss_info["class_info"]["subject"]    = "化學";
    
    PointInfo["seq"]  = "1";
    PointInfo["time"] = "5825";
    PointInfo["dsc"]  ="開始試驗1";
    calss_info["class_info"]["time_info"].append(PointInfo);

    PointInfo["seq"]  = "2";
    PointInfo["time"] = "19825";
    PointInfo["dsc"]  ="開始試驗2";
    calss_info["class_info"]["time_info"].append(PointInfo);
    
    root["video_list"].append(calss_info);          /* 數組內再添加數組 */

    calss_info.clear();   /* 清空之前的結點信息 */
    
    calss_info["seq"] = "2";
    calss_info["class_addr"]="rtmp://192.168.1.252/test/chan2";
    calss_info["class_info"]["class"] = "氧化反應2";
    calss_info["class_info"]["section"] = "高中";
    calss_info["class_info"]["grade"]      = "高一";
    calss_info["class_info"]["teacher"]    = "陳海";
    calss_info["class_info"]["subject"]    = "化學";
    root["video_list"].append(calss_info);

    string data = writer.write(root);
    cout << "data: " << data <<endl;            /* 字符串格式輸出 */

    int list_size = root["video_list"].size();
        
    //cout << root["video_list"].toStyledString() << endl;
    cout << root.toStyledString() << endl;
    cout << "list_size: " << list_size << endl;
    
    /* 獲取第一層數組 */
    for(int i = 0; i < list_size; ++i)
    {
        cout << "class_addr: " << root["video_list"][i]["class_addr"].asString() << endl;
        cout << "class_info size: " << root["video_list"][i]["class_info"].size() <<endl;
        cout << "class: " << root["video_list"][i]["class_info"]["class"].asString() <<endl;
        cout << "section_id: " << root["video_list"][i]["class_info"]["section_id"].asString() <<endl;

        cout << "time info size: " << root["video_list"][i]["class_info"]["time_info"].size() << endl;
        cout <<  root["video_list"][i]["class_info"]["time_info"].toStyledString() << endl;
        
        /* 獲取數組內的數組 */
        for(int j = 0; j < root["video_list"][i]["class_info"]["time_info"].size(); ++j)
        {
            //point_info.seq        = root["video_list"][i]["class_info"]["time_info"][j]["seq"].asInt();
            cout <<  root["video_list"][i]["class_info"]["time_info"][j]["time"].asString() << endl;
            //unsigned int time = lexical_cast<int>(root["video_list"][i]["class_info"]["time_info"][j]["time"].asString());
            //cout <<  root["video_list"][i]["class_info"]["time_info"][j]["dsc"].asString() << endl;
        }
    }
}

3、獲取json的名稱

void JsonCPP_test()
{
    Json::Reader read;
    Json::Value test_value;
    
    test_value["device"] = "testdev";

    Json::Value GradeValue, SubjectValue, SectionValue;
    //GradeValue["grade"].append("一年級");
    //GradeValue["grade"].append("二年級");
    const char* grade = "grade";

    test_value["catalog"][grade].append("一年級");
    test_value["catalog"]["grade"].append("二年級");
    test_value["catalog"]["subject"].append("小學");
    test_value["catalog"]["subject"].append("初中");
    
    //if(read.parse(strValue, test_value, false))
    cout << test_value.toStyledString() << endl;
    int array_size = test_value["catalog"].size();
    cout << "array_size: " << array_size << endl;
    
    int i = 0;
    int j = 0;
    int catalog_size = test_value["catalog"].size();

    vector<string> root_name = test_value.getMemberNames();
    for(int i = 0; i < root_name.size();++i)
    {
        cout << "root_name: " << root_name[i] << endl;
    }

    vector<string> name = test_value["catalog"].getMemberNames();
    for(int i = 0; i < name.size();++i)
    {
        cout << "name: " << name[i] << endl;
    }

    /* 解析年級。一年級、二年級 */
    for(; j < catalog_size; ++j)
    {
        for(; i < test_value["catalog"][name[j]].size(); ++i)
        {
            cout << test_value["catalog"][name[j]][i].asString() << endl;
        }
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章