织梦CMS - 轻松建站从此开始!

罗索

jsoncpp构建及解析复杂数组

jackyhwei 发布于 2023-03-02 20:11 点击:次 
1、示例的json格式 2、测试代码 使用的版本jsonjson_0.10.7 void test_video_list() { Json::Valueroot; Json::Valuecalss_info; Json::FastWriterwriter; Json::ValuePointInfo; char *device= device ; char *status= status ; root[device]= test1 ;
TAG: json  jsoncpp  数组  

1、示例的json格式

2、测试代码

使用的版本jsonjson_0.10.7

  1. void test_video_list() 
  2.     Json::Value root; 
  3.     Json::Value calss_info; 
  4.     Json::FastWriter writer; 
  5.     Json::Value PointInfo; 
  6.      
  7.     char* device = "device"
  8.     char* status = "status"
  9.  
  10.     root[device]      = "test1";   /* key值可以用char*或直接是字符串常量 */ 
  11.     root[status]      = "0"
  12.     root["total_num"] = "2"
  13.  
  14.     calss_info["seq"] = "1"
  15.     calss_info["class_addr"]="rtmp://192.168.1.252/test/chan1"
  16.     calss_info["class_info"]["class"] = "氧化反应1"
  17.     calss_info["class_info"]["section"] = "高中"
  18.     calss_info["class_info"]["grade"]      = "高一"
  19.     calss_info["class_info"]["teacher"]    = "陈海"
  20.     calss_info["class_info"]["subject"]    = "化学"
  21.      
  22.     PointInfo["seq"]  = "1"
  23.     PointInfo["time"] = "5825"
  24.     PointInfo["dsc"]  ="开始试验1"
  25.     calss_info["class_info"]["time_info"].append(PointInfo); 
  26.  
  27.     PointInfo["seq"]  = "2"
  28.     PointInfo["time"] = "19825"
  29.     PointInfo["dsc"]  ="开始试验2"
  30.     calss_info["class_info"]["time_info"].append(PointInfo); 
  31.      
  32.     root["video_list"].append(calss_info);          /* 数组内再添加数组 */ 
  33.  
  34.     calss_info.clear();   /* 清空之前的结点信息 */ 
  35.      
  36.     calss_info["seq"] = "2"
  37.     calss_info["class_addr"]="rtmp://192.168.1.252/test/chan2"
  38.     calss_info["class_info"]["class"] = "氧化反应2"
  39.     calss_info["class_info"]["section"] = "高中"
  40.     calss_info["class_info"]["grade"]      = "高一"
  41.     calss_info["class_info"]["teacher"]    = "陈海"
  42.     calss_info["class_info"]["subject"]    = "化学"
  43.     root["video_list"].append(calss_info); 
  44.  
  45.     string data = writer.write(root); 
  46.     cout << "data: " << data <<endl;            /* 字符串格式输出 */ 
  47.  
  48.     int list_size = root["video_list"].size(); 
  49.          
  50.     //cout << root["video_list"].toStyledString() << endl; 
  51.     cout << root.toStyledString() << endl; 
  52.     cout << "list_size: " << list_size << endl; 
  53.      
  54.     /* 获取第一层数组 */ 
  55.     for(int i = 0; i < list_size; ++i) 
  56.     { 
  57.         cout << "class_addr: " << root["video_list"][i]["class_addr"].asString() << endl; 
  58.         cout << "class_info size: " << root["video_list"][i]["class_info"].size() <<endl; 
  59.         cout << "class: " << root["video_list"][i]["class_info"]["class"].asString() <<endl; 
  60.         cout << "section_id: " << root["video_list"][i]["class_info"]["section_id"].asString() <<endl; 
  61.  
  62.         cout << "time info size: " << root["video_list"][i]["class_info"]["time_info"].size() << endl; 
  63.         cout <<  root["video_list"][i]["class_info"]["time_info"].toStyledString() << endl; 
  64.          
  65.         /* 获取数组内的数组 */ 
  66.         for(int j = 0; j < root["video_list"][i]["class_info"]["time_info"].size(); ++j) 
  67.         { 
  68.             //point_info.seq        = root["video_list"][i]["class_info"]["time_info"][j]["seq"].asInt(); 
  69.             cout <<  root["video_list"][i]["class_info"]["time_info"][j]["time"].asString() << endl; 
  70.             //unsigned int time = lexical_cast<int>(root["video_list"][i]["class_info"]["time_info"][j]["time"].asString()); 
  71.             //cout <<  root["video_list"][i]["class_info"]["time_info"][j]["dsc"].asString() << endl; 
  72.         } 
  73.     } 

3、获取json的名称

  1. void JsonCPP_test() 
  2.     Json::Reader read; 
  3.     Json::Value test_value; 
  4.      
  5.     test_value["device"] = "testdev"
  6.  
  7.     Json::Value GradeValue, SubjectValue, SectionValue; 
  8.     //GradeValue["grade"].append("一年级"); 
  9.     //GradeValue["grade"].append("二年级"); 
  10.     const char* grade = "grade"
  11.  
  12.     test_value["catalog"][grade].append("一年级"); 
  13.     test_value["catalog"]["grade"].append("二年级"); 
  14.     test_value["catalog"]["subject"].append("小学"); 
  15.     test_value["catalog"]["subject"].append("初中"); 
  16.      
  17.     //if(read.parse(strValue, test_value, false)) 
  18.     cout << test_value.toStyledString() << endl; 
  19.     int array_size = test_value["catalog"].size(); 
  20.     cout << "array_size: " << array_size << endl; 
  21.      
  22.     int i = 0; 
  23.     int j = 0; 
  24.     int catalog_size = test_value["catalog"].size(); 
  25.  
  26.     vector<string> root_name = test_value.getMemberNames(); 
  27.     for(int i = 0; i < root_name.size();++i) 
  28.     { 
  29.         cout << "root_name: " << root_name[i] << endl; 
  30.     } 
  31.  
  32.     vector<string> name = test_value["catalog"].getMemberNames(); 
  33.     for(int i = 0; i < name.size();++i) 
  34.     { 
  35.         cout << "name: " << name[i] << endl; 
  36.     } 
  37.  
  38.     /* 解析年级。一年级、二年级 */ 
  39.     for(; j < catalog_size; ++j) 
  40.     { 
  41.         for(; i < test_value["catalog"][name[j]].size(); ++i) 
  42.         { 
  43.             cout << test_value["catalog"][name[j]][i].asString() << endl; 
  44.         } 
  45.     } 
(FPGATOM)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/202303/17869.html]
本文出处:CSDN博客 作者:FPGATOM 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容