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;
}
}
}