QT使用QJson生成解析,简单的JSON,复杂的Json使用方法
来源:互联网 发布:隔音窗户 知乎 编辑:程序博客网 时间:2024/05/21 14:01
<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;
这段简单的json只有age,name,myAccount
他的解析方法是:
//简单的QT解析JSONQJsonParseError 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();//如果包含nameif (obj.contains("name")){//的到nameQJsonValue name_value = obj.take("name");if (name_value.isString()){//转换namename = 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
1 0
- QT使用QJson生成解析,简单的JSON,复杂的Json使用方法
- 使用QJson解析Qt通过UDP发送的JSON数据
- 使用 Qjson 解析 JSON 数据的方法
- 生成Json、解析Json的简单示例
- 复杂的json解析
- JSON的简单和复杂解析
- QJson 之JSON生成
- QT中QJson库的使用以及json文件的操作
- Gson解析简单json以及复杂的json数据
- QJson的简单使用
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 使用Gson解析复杂的json数据
- 87. Scramble String
- mysql while,loop,repeat循环,符合条件跳出循环
- []欢迎使用CSDN-markdown编辑器
- Ext.app.Controller.onLaunch方法介绍。
- NandFlash、NorFlash、DataFlash、SDRAM
- QT使用QJson生成解析,简单的JSON,复杂的Json使用方法
- Android自定义View分享——一个水平的进度条
- 测试markdown
- (一)数据库就是这样-JDBC及相关
- 一些前端的笔记
- 比特币脚本
- 数据段,代码段,堆栈段,BSS段区别
- Linux cp命令
- 链式队列