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();// 獲取浮點數據
........
}