0、引用
http://www.json.org/
http://www.json.org.cn/
1、Json簡介
Json是一種輕量級數據交換格式。它的基本結構包括 (pair)、值的有序列表(array)。pair 結構和array結構可以統稱為對象(Object);pair object中的key必須是個字符串,pair object中的value可以是任意數據類型(pair object、array object、string、int 等等). array中的成員也可以是任意類型,但要array中所有value的數據類型一致。
圖1
圖2
2、Jsoncpp簡介
c++使用jsoncpp封裝和解析json數據。重要的數據結構 Json::Value root; Json::value 就是Objec數據類型。如果要當成pair object,則使用方式如下root["key"] = value; 如果當成array object,則使用方式如下,root.append(value); Object可以嵌套使用。例如 {“name”: {"sex": "man"}},可以用jsoncpp寫成 root["name"]["sex"] = "man";實際上array的valu在內部也是有key的,這個key就是序列index。
3、Jsoncpp表示Json對象
{“name”:"jolan",
? ? “address”:{“province”:“beijing”,“area”:“haidian”},
? ? “Hoby”:["running","coding","football"]
};
上面的Json對象用Jsoncpp可以這樣描述:
Json::Value root;
root["name"] = "jolan";
root["addres"]["province"] = "beijing";
root["addres"]["area"] = "haidian";
root["Hoby"].append(“running”);
root["Hoby"].append("coding");
root["Hoby"].append("football");
如果數組的value是個Object,則寫填充好Object,再append。例如 {"people":[{"name":"jolan"},{"name":"linus"}]}
Json::Value root;
Json::Value element;
element["name"] = "jolan";
root.append(element);
element["name"] = "linus";
root.append(element);
4、解析Jsoncpp對象
Jsoncpp對象讀取到最后,都只能用基本類型來解析。例如: 如何解析root["addres"]["province"];面對root["addres"]["province"]的時候,要告訴Jsoncpp如何看到這個值,如果,不指定的話就默認為都是Json::value 對象;因此正確的解析應該是 std::string strPro = root["addres"]["province"].asString(),類似的,還有asDouble()、asInt()、asUInt()等等。 如果讀取到的某個對象是數組列表,則用下標取出這個數據對應的value。例如 root["Hoby"][0],root["Hoby"].size()指示了數組對象的大小。
3、Jsonccpp序列化Json對象
Json::FastWriter fw;
Json::Value oRoot;
std::string stdBody? = fw(oRoot)
5、Jsoncpp反序列化Json字符串
Json::Reader oReader;
Json::Value? oData;
if(!oReader.parse(strRspBody.c_str(), oData, false)) {
return -50;
}
4、遍歷Key字段
Json::Value::Members oMember = oData.getMemberNames();
Json::Value::Members::iterator iter;
for(iter=oMember.begin();iter != oMember.end();++iter) {
LOGSYS_WATER(_LC_DEBUG_,"key:%s",(*iter).c_str());
}