初次使用json使用隨記
json格式的解析不需要自己進行編碼實現(xiàn),已經(jīng)有好多穩(wěn)定的開源庫可供使用;c++可以使用jsoncpp,c可以使用cjson
JsonCpp是一個開源庫
下載地址:https://github.com/open-source-parsers/jsoncpp
文檔地址:http://open-source-parsers.github.io/jsoncpp-docs/doxygen/index.html
json數(shù)據(jù)格式有{} [] : " , 幾種符號組成,如下:
鍵值對 “key”:value (說明:value可是數(shù)值 --》 “age”:18,也可以是字符串“string”--》“name”:“l(fā)ilei”);
對象:一對{}即為一個對象,{}內(nèi)可以是鍵值對的集合,也可以是數(shù)組[ ]
數(shù)組:一對[ ]既是一個數(shù)組,其概念類似于C語言中的數(shù)組,數(shù)組內(nèi)可以是對象,也可以是鍵值對
下面是一個簡單的例子,涵蓋鍵值對,數(shù)組,對象
{
"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數(shù)據(jù)的存儲,數(shù)據(jù)序列化和反序列化的方法),Reader(在字符串中對json數(shù)據(jù)的讀?。?/strong>
重點:在處理json數(shù)據(jù)是以下兩個對象是必須要創(chuàng)建的
Json::Reader reader;
Json::Value root;
處理流程:
reader.parse(task_data->data, root);
if(root.isobject){
std::string taskJsonString = root.toStyledString(); // 將json消息內(nèi)容全部轉(zhuǎn)換為字符串的格式(非必要操作)
// 從json數(shù)據(jù)中獲取需要的值
Json::Value msg= root["persional-msg"];
std::string teacher_name = msg["head_teacher"]["name"].asString(); // 獲取字符串
uint16 teach_age = msg["head_teacher"]["age"].asUint(); // 獲取整型據(jù)
float teach_hight = msg["head_teacher"]["hight"].asDouble();// 獲取浮點數(shù)據(jù)
........
}
提高程序健壯性常用到的接口:
root["key_value"].isNull()----->判斷是否有key_value鍵值:如果沒有返回true
root["RouteData"].isObject()----->判斷是否是RouteData對應(yīng)的是否是一個對象:如果是返回true
root["RouteArrayData"].size() ---->讀取RouteData數(shù)組的大小
浙公網(wǎng)安備 33010602011771號