json格式的解析不须要本身进行编码实现,已经有好多稳定的开源库可供使用;c++能够使用jsoncpp,c能够使用cjsonhtml
JsonCpp是一个开源库c++
下载地址:https://github.com/open-source-parsers/jsoncppgit
文档地址:http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.htmlgithub
json数据格式有{} [] : " , 几种符号组成,以下:json
键值对 “key”:value (说明:value但是数值 --》 “age”:18,也能够是字符串“string”--》“name”:“lilei”);数组
对象:一对{}即为一个对象,{}内能够是键值对的集合,也能够是数组[ ]ui
数组:一对[ ]既是一个数组,其概念相似于C语言中的数组,数组内能够是对象,也能够是键值对编码
下面是一个简单的例子,涵盖键值对,数组,对象htm
{对象
"task":"persional-message-deal",
"persional-msg":{
"head-teacher":{
"name":"hangmeimei",
"sex":"female",
"age":28,
"hight":49.8
},
"students-msgs":[
{
"name":"xiaoming",
"sex":"male",
"age":12,
"math-scores":90,
"english-scores":110
}, {
"name":"xiaohong",
"sex":"female",
"age":12,
"math-scores":90,
"english-scores":110
}
]
}
}
解析:
jsoncpp中两类 Value(json数据的存储,数据序列化和反序列化的方法),Reader(在字符串中对json数据的读取)
重点:在处理json数据是如下两个对象是必需要建立的
Json::Reader reader;
Json::Value root;
处理流程:
reader.parse(task_data->data, root);
if(root.isobject){
std::string taskJsonString = root.toStyledString(); // 将json消息内容所有转换为字符串的格式(非必要操做)
// 从json数据中获取须要的值
Json::Value msg= root["persional-msg"];
std::string teacher_name = msg["head_teacher"]["name"].asString(); // 获取字符串
uint16 teach_age = msg["head_teacher"]["age"].asUint(); // 获取整型据
float teach_hight = msg["head_teacher"]["hight"].asDouble();// 获取浮点数据
........
}