Qt 是一个跨平台C++图形用户界面应用程序开发框架,它既可以开发GUI程序,也可用于开发非GUI程序,在实际工作中,我们会使用qt解析json,那Qt解析json方法是什么?下面来我们就来给大家讲解一下。
QT中使用json还是比较方便的,下面用例子直接说明:
QT使用json需要包含的头文件
#include < qjsondocument.h > #include #include #include
先看一段简单的生成QJSON数据的方法吧:
//简单的QTJson数据 QJsonObject simp_ayjson; simp_ayjson.insert("name", "LLH"); simp_ayjson.insert("age", 20); simp_ayjson.insert("myAccounts", QString::fromLocal8Bit("123你好")); QJsonDocument document; document.setObject(simp_ayjson); QByteArray simpbyte_array = document.toJson(QJsonDocument::Compact); QString simpjson_str(simpbyte_array); qDebug() << QString::fromLocal8Bit("简单的QTJson数据:") << simpjson_str;
输出结果:
"简单的QTJson数据:" "{\"age\":20,\"myAccounts\":\"123你好\",\"name\":\"LLH\"}"
解析方法是:
//简单的QT解析JSON QJsonParseError simp_json_error; QString name, myAccount; int age; //QTJSON所有的元素 QJsonDocument simp_parse_doucment = QJsonDocument::fromJson(simpjson_str.toUtf8(), & simp_json_error); //检查json是否有错误 if (simp_json_error.error == QJsonParseError::NoError) { if (simp_parse_doucment.isObject()) { //开始解析json对象 QJsonObject obj = simp_parse_doucment.object(); //如果包含name if (obj.contains("name")) { //的到name QJsonValue name_value = obj.take("name"); if (name_value.isString()) { //转换name name = name_value.toVariant() .toString(); } } if (obj.contains("myAccounts")) { QJsonValue myAccount_value = obj.take("myAccounts"); if (myAccount_value.isString()) { myAccount = myAccount_value.toString(); } } if (obj.contains("age")) { QJsonValue age_value = obj.take("age"); if (age_value.isDouble()) { age = age_value.toVariant() .toInt(); } } } } qDebug() << QString::fromLocal8Bit("简单的QT解析出来的数据:") << name << "," << age << "," << myAccount;
解析结果:
"简单的QT解析出来的数据:" "LLH" , 20 , "123你好"
其实这种json能满足一般的要求但是有些特殊数据要求json里面带有json数组就需要复杂一点的json了,来吧让我们继续。
复杂的json生成代码:
//复杂的QTJson数据 QJsonArray arrays; for (int i = 0; i < 5; i++) { arrays.insert(i, QString::fromLocal8Bit("你好:%1") .arg(i)); } QJsonObject complex_json; complex_json.insert("name", "LLHlllll"); complex_json.insert("age", 201); complex_json.insert("myAccounts", QString::fromLocal8Bit("123你好llll")); complex_json.insert("arrays", arrays); QJsonDocument complex_document; complex_document.setObject(complex_json); QByteArray complex_byte_array = complex_document.toJson(QJsonDocument::Compact); QString complex_json_str(complex_byte_array); qDebug() << "\n" << QString::fromLocal8Bit("复杂的QTJson数据:") << complex_json_str;
输出结果:
"复杂的QTJson数据:" "{\"age\":201,\"arrays\":[\"你好:0\",\"你好:1\",\"你好:2\",\"你好:3\",\"你好:4\"],\"myAccounts\":\"123你好llll\",\"name\":\"LLHlllll\"}"
那么让我们来看看复杂的json如何解析吧:
//复杂的QT数据解析 QJsonParseError complex_json_error; QJsonDocument complex_parse_doucment = QJsonDocument::fromJson(complex_json_str.toUtf8(), & complex_json_error); if (complex_json_error.error == QJsonParseError::NoError) { if (complex_parse_doucment.isObject()) { //开始解析json对象 QJsonObject jsonObject = complex_parse_doucment.object(); if (jsonObject.contains("name")) { QJsonValue groupName_value = jsonObject.take("name"); if (groupName_value.isString()) { name = groupName_value.toString(); } } if (jsonObject.contains("myAccounts")) { QJsonValue myAccount_value = jsonObject.take("myAccounts"); if (myAccount_value.isString()) { myAccount = myAccount_value.toVariant() .toString();; } } if (jsonObject.contains("age")) { QJsonValue groupIndex_value = jsonObject.take("age"); if (groupIndex_value.isDouble()) { age = groupIndex_value.toVariant() .toInt();; } } if (jsonObject.contains("arrays")) { QJsonValue arrays_value = jsonObject.take("arrays"); if (arrays_value.isArray()) //判断他是不是json数组 { QJsonArray heeloArray = arrays_value.toArray();; for (int i = 0; i < heeloArray.size(); i++) { QJsonValue helloArrayValue = heeloArray.at(i); if (helloArrayValue.isString()) { qDebug() << "\n" << QString::fromLocal8Bit("输出复杂的json:") << helloArrayValue.toString(); } } } } } }
可以看到复杂的json解析代码有点长,原因可能是QT喜欢w3c就是docment元素的解析风格,也就是docment树解析,把数据加载成一颗树,然后在进行解析,好处是速度快,缺点是需要大量内存,代码虽然长点但是好理解,因为每一步都他的解析方式。
解析结果:
"输出复杂的json:" "你好:0" "输出复杂的json:" "你好:1" "输出复杂的json:" "你好:2" "输出复杂的json:" "你好:3" "输出复杂的json:" "你好:4"
按照以上这些步骤就完成了qt解析json的过程,我们可以尝试着自己去解析,解决这方面问题!最后大家如果想要了解更多json相关知识,敬请关注奇Q工具网。
推荐阅读: