Qt中如何解析Json數(shù)據(jù)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
Qt5中提供了很方便的用于解析Json數(shù)據(jù)的類(lèi),主要包括QJsonValue,QJsonArray,QJsonObject,QJsonDocument等。使用這幾個(gè)類(lèi)能夠很輕易在C++端創(chuàng)建和處理Json格式的數(shù)據(jù),或?qū)son數(shù)據(jù)進(jìn)行序列化及反序列化等。
QJsonValue類(lèi)是用于保存所有類(lèi)型的Json數(shù)據(jù),它將Json數(shù)據(jù)歸為下列6種基本類(lèi)型:
bool?QJsonValue::Bool double?QJsonValue::Double string?QJsonValue::String array?QJsonValue::Array object?QJsonValue::Object null?QJsonValue::Null
因此QJsonValue可以保存上述這6種類(lèi)型的Json數(shù)據(jù),并可以轉(zhuǎn)換對(duì)應(yīng)的C++類(lèi)。如下示例
????QJsonValue?qJsnVal; ????if(qJsnVal.isBool()){ ????????//如果是布爾類(lèi)型,可以轉(zhuǎn)換C++的bool類(lèi)型 ????????bool?bValue?=?qJsnVal.toBool(); ????}else?if(qJsnVal.isDouble()){ ????????//如果是數(shù)值類(lèi)型,可以轉(zhuǎn)換C++的double類(lèi)型 ????????double?dValue?=?qJsnVal.toDouble(); ????????//也可以轉(zhuǎn)換為int類(lèi)型 ????????int?iValue?=?qJsnVal.toInt(); ????}else?if(qJsnVal.isString()){ ????????//如果是字符串類(lèi)型,可以轉(zhuǎn)換QStrint進(jìn)行解析 ????????QString?qStrValue?=?qJsnVal.toString(); ????}else?if(qJsnVal.isObject()){ ????????//如果是Json對(duì)象,可以轉(zhuǎn)換QJsonObject進(jìn)行解析 ????????QJsonObject?qJsnObj?=?qJsnVal.toObject(); ????}else?if(qJsnVal.isArray()){ ????????//如果是Json數(shù)組,可以轉(zhuǎn)換QJsonArray進(jìn)行解析 ????????QJsonArray?qJsnArr?=?qJsnVal.toArray(); ????}else?if(qJsnVal.isNull()){ ????????//可以判斷是否是js端的null類(lèi)型 ????}else?if(qJsnVal.isUndefined()){ ????????//可以判斷是否是js端的undefined類(lèi)型 ????}
QJsonObject類(lèi)是用來(lái)解析json對(duì)象值的,其主要常用的方法有insert, value, take等
QJsonObject?qjsonObj; ????qjsonObj.insert("key1",?"value1");??//insert方法的第二個(gè)入?yún)⑹荙JsonValue類(lèi)型,因此可以傳入各種基本類(lèi)型的json數(shù)據(jù) ????qjsonObj.insert("key2",?3.14); ????qjsonObj.insert("key3",?true); ????//此時(shí)qjsonObj的內(nèi)容是:{key1:"value",?key2:3.14,?key3:?true} ????QString?value1?=?qjsonObj.value("key1").toString();?//value1值為"value1" ????//QJsonObjec的value方法是取出json對(duì)象的某個(gè)屬性值,但不刪除該屬性,因此此時(shí) ????//qjsonObj的內(nèi)容仍然是:{key1:"value",?key2:3.14,?key3:?true} ????bool?value3?=?qjsonObj.take("key3").toBool();???//value3值為true ????//QJsonObjec的take方法是取出json對(duì)象的某個(gè)屬性值,并刪除該屬性,因此此時(shí) ????//qjsonObj的內(nèi)容變成了:{key1:"value",?key2:3.14}