QT使用QJson生成解析,简单的JSON,复杂的Json使用方法
2016-10-17 10:53
716 查看
<strong><span style="font-size:24px;color:#cc33cc;">吾虽浪迹天涯,却从未迷失本心</span></strong>又到了周一了,今天说的是生成解析复杂的json用法
---------------------------------------------------------------------------------------------------华丽的分割线---------------------------------------------------------------------------------------------------
说实话我不太喜欢Qjson的解析方法但是他的语法很清晰
那么先看一段简单的生成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;
该段代码会生成一个简单的Qjson字符串如图:
这段简单的json只有age,name,myAccount
他的解析方法是:
//简单的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.isDouble()) { myAccount = myAccount_value.toVariant().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;
解析出来的数据如图:
其实这种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;
如图复杂的json打印:
那么让我们来看看复杂的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教程就到这里了,其他的json再怎么复杂万变不离其宗。
--------------------------------------------------------------------------------------------------------------end-------------------------------------------------------------------------------------------------------------------
最后附上博主的源代码:http://download.csdn.net/detail/li491093957/9655744
相关文章推荐
- PHP 生成复杂JSON格式 简单快速方法
- 使用QJson解析Qt通过UDP发送的JSON数据
- 转:PHP 生成复杂JSON格式 简单快速方法
- 使用WinRar将Qt编译生成的exe和依赖的dll文件打包为一个exe文件的简单方法
- jsp生成html(方法简单,只用使用一个serlvet)
- Qt ② QStringList的简单使用方法
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- Qt ② QStringList的简单使用方法
- 一种简单的JSON解析方法
- QT-Linguist使用方法简单介绍
- Android中的httpClient使用及JSON格式数据的解析方法
- 使用Jackson解析json配合Hibernate报错的解决方法
- 在vs2010中使用qt的简单方法
- 使用Qt内置引擎解析JSON格式数据
- JsonCpp的简单使用方法
- QT:直接使用ui文件生成h文件的方法
- Ajax使用方法,经典Ajax封装,可接收解析后台传回的json对象和json数组
- 使用qt dbus 传递复杂数据结构的方法
- 一个可以生成复杂结构的json数据的简单例子