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