Qt中如何解析Json数据
扫描二维码
随时随地手机看文章
Qt5中提供了很方便的用于解析Json数据的类,主要包括QJsonValue,QJsonArray,QJsonObject,QJsonDocument等。使用这几个类能够很轻易在C++端创建和处理Json格式的数据,或对Json数据进行序列化及反序列化等。
QJsonValue类是用于保存所有类型的Json数据,它将Json数据归为下列6种基本类型:
bool QJsonValue::Bool double QJsonValue::Double string QJsonValue::String array QJsonValue::Array object QJsonValue::Object null QJsonValue::Null
因此QJsonValue可以保存上述这6种类型的Json数据,并可以转换对应的C++类。如下示例
QJsonValue qJsnVal; if(qJsnVal.isBool()){ //如果是布尔类型,可以转换C++的bool类型 bool bValue = qJsnVal.toBool(); }else if(qJsnVal.isDouble()){ //如果是数值类型,可以转换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数组,可以转换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方法的第二个入参是QJsonValue类型,因此可以传入各种基本类型的json数据 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}