QT 与WEB的交互,大部分就是客户端与网页的交互,有时,我们需要得到服务器返回的具体的数据,就通过客户端与网页交互的过程中拿到所需要的参数,在我的另一篇博文中有讲到过http://blog.csdn.net/li235456789/article/details/50737777 怎么去获取网页返回的链接里面对应的每个参数。 再通过这个参数, 我们使用http协议,用get或者post 方式把进行数据的请求或者上传, 无论请求成功与否,上传成功与否,当请求对象绑定了finished()的信号时,就会返回对应的json数据,要获取json数据中的具体的内容,这就需要进行json解析。

而QT 没有自带解析json数据的库,这就需要我们添加新json数据解析的库。在我的下载资源里面可以找 "解析json数据源码", 因为是才开始上传的,拿不到外链,这里没源贴外链出来。这个里面就有对应的json数据解析的所需的库源码。

下面是客户端代码实现:

加上对应的头文件:

#include "qjson/parser.h"
#include "qjson/serializer.h"

QByteArray resultDate;

resultDate = 对应的需要解析的json 数据。

QJson::Parser parser;
bool ok = false;
const QVariant data = parser.parse(resultDate, &ok);

//这里把QByteArray 数据转换为 QVariant数据类型。

const QVariantMap dataMap = data.toMap();

//这里再把QVariant转换为QVariantMap, 因为json数据里面的键值是相互对应的,一个键对应一个值。

QVariantMap record = dataMap;
const QString errorCode = dataMap.value(m_opt.common.key.errorCode).toString();

//在这里如果json数据里面,是不包含数组的, 就一个最简单的形式如同下面这种:

{"error_code":"0","error_msg":"","age":26,"comic_member":"Y","comic_member_time":"1539057544"}

就可以直接用const QString errorCode = dataMap.value(m_opt.common.key.errorCode).toString();这种形式获取到,这里是获取errorCode的值 , 返回为0保存在const QString errorCode 的结果里面。这里注意到一个 m_opt.common.key.errorCode  这里在我们项目里其实它是一个结构体, 保存着xml里面的默认的值, 它等同于tr("error_code"),

所以,如果你不同xml保存对应json的默认键值的话就可以写为:

const QString errorCode = dataMap.value(tr("error_code")).toString();

当然,写成xml保存的话,结构条理清晰一点,代码可以看起来规范一点,不那么乱。

上面介绍了一种简单的json解析,当然有些json数据会复杂很多,再根据实际情况来进行处理,比如说:

{"error_code":"0","error_msg":"","comic_class":"V","comic_class_name":"\u6709\u97f3\u6f2b\u753b","comic_type":"A","comic_type_name":"\u7ae5\u8bdd\u7cfb\u5217","is_compilations":"N","compilations_id":"0","compilations_name":null,"compilations_en_name":null,"comic_name":"\u96ea\u5973\u738b","comic_info":{"comic_id":"189","comic_class":"V","comic_type":"A","comic_name":"\u96ea\u5973\u738b","comic_level":"A\/B\/C","author":"\u8f66\u661f\u73cd  \u60f3\u8c61\u5de5\u5382","synopsis":"\u4e0d\u53ef\u601d\u8bae\u7684\u6f2b\u753b\u82f1\u8bed-\u6fc0\u53d1\u5b69\u5b50\u5b66\u4e60\u82f1\u8bed\u7684\u5174\u8da3\uff0c\u63ed\u53d1\u82f1\u8bed\u5b66\u4e60\u7684\u771f\u76f8\uff0c\u88ab\u5e7f\u5927\u5b66\u751f\u3001\u5bb6\u957f\u548c\u8001\u5e08\u79f0\u4e3a\"\u795e\u5947\u7684\u7ae5\u8bdd\u4e66\"\u548c\"\u63d0\u9ad8\u82f1\u8bed\u6c34\u5e73\u7684\u79d8\u7c4d\"\u3002\r\n\u5b69\u5b50\u4eec\u53ea\u5728\u5b66\u6821\u5b66\u4e60\u82f1\u8bed\uff0c\u662f\u8fdc\u8fdc\u4e0d\u591f\u7684\u3002\u5bb6\u957f\u4eec\u7684\u70ed\u60c5\u4ecb\u5165\uff0c\u662f\u63d0\u9ad8\u5b69\u5b50\u82f1\u8bed\u6c34\u5e73\u7684\u4e00\u4e2a\u5173\u952e\u56e0\u7d20\u3002\u300aWOW\uff01\u4e0d\u53ef\u601d\u8bae\u7684\u6f2b\u753b\u82f1\u8bed\u300b\u662f\u4e00\u5957\u9002\u5408\u5728\u5bb6\u5ead\u5185\u90e8\u4e92\u52a8\u5b66\u4e60\u7684\u4e1b\u4e66\uff0c\u4ece\u8ddf\u8bfb\u53e5\u5b50\uff0c\u5230\u89d2\u8272\u626e\u6f14\u6e38\u620f\uff0c\u5b69\u5b50\u4eec\u7684\u82f1\u8bed\u80fd\u529b\u4f1a\u5728\u9605\u8bfb\u7ecf\u5178\u7ae5\u8bdd\u6545\u4e8b\u4e2d\u5f97\u5230\u63d0\u9ad8\u3002\r\n\u3002\u300aWOW\uff01\u4e0d\u53ef\u601d\u8bae\u7684\u6f2b\u753b\u82f1\u8bed\u300b\u9009\u53d6\u4e86\u5c0f\u670b\u53cb\u4eec\u6700\u559c\u7231\u7684\u7ae5\u8bdd\u6545\u4e8b\uff0c\u5bd3\u6559\u4e8e\u4e50\uff0c\u8ba9\u5c0f\u670b\u53cb\u4eec\u5728\u9605\u8bfb\u6545\u4e8b\u7684\u4e50\u8da3\u4e2d\u5b66\u4e60\u82f1\u8bed\uff0c\u51cf\u8f7b\u4e86\u4ed6\u4eec\u7684\u5b66\u4e60\u538b\u529b\u3002","total_episodes":"6","upload_episodes":"5","click_times":"6841","r_create_staff":"test9","r_create_time":"2014-08-11 10:54:47","r_modify_staff":"feng","r_modify_time":"2015-07-07 10:38:46","comic_status":"Y","comment_times":"12","comment_scores":"99.9","comic_name_en":"\u96ea\u5973\u738b","is_compilations":"N","compilations_id":"0","is_learning":null},"downloadinfo":[{"fe":"3","title":"\u96ea\u5973\u738b03","image_list":[{"image_id":"3263","image_url":"03-1.jpg","start":"1","over":"2"},{"image_id":"3264","image_url":"03-2.jpg","start":"3","over":"9"},{"image_id":"3266","image_url":"03-3.jpg","start":"10","over":"13"},{"image_id":"3267","image_url":"03-4.jpg","start":"14","over":"20"},{"image_id":"3268","image_url":"03-5.jpg","start":"21","over":"27"},{"image_id":"3270","image_url":"03-6.jpg","start":"28","over":"33"},{"image_id":"3272","image_url":"03-7.jpg","start":"34","over":"41"},{"image_id":"3273","image_url":"03-8.jpg","start":"42","over":"47"},{"image_id":"3274","image_url":"03-9.jpg","start":"48","over":"53"}]}]}

这种有数组的就麻烦一些:

const QVariant list = record.value(m_opt.geturl.key.relist);
if (list.isValid() && list.canConvert<QVariantList>()) {
foreach (const QVariant& m, list.toList()) {
QVariantMap details = m.toMap();
result.setComicName(record.value(m_opt.geturl.key.comicName).toString());

..........

const QVariant imageLis = details.value(m_opt.geturl.key.comicImageList);
foreach(const QVariant& imageLt, imageLis.toList()) {
QVariantMap imageDetails = imageLt.toMap();
result.setComicImageId(imageDetails.value(m_opt.geturl.key.comicImageId).toInt());

................

}

}

}

这种包含数组的json数据就需要一层一层把所有数据解析出来。

另外有一种可以在线看清json数据格式的工具:

http://www.bejson.com/jsoneditoronline/

可以把对应的格式看出来。

它就可以清晰地看出对应的json结构。

QT Json解析方法相关推荐

  1. QT——JSON解析

    一些相关知识的链接: 有关JOSN相关的基础知识:JSON基础 有关QT中JSON的操作:QT中JSON的操作 一个在线工具,可以进行JSON格式化分析的网址:JSON格式化 如何从网络中轻松得到JS ...

  2. Android Json解析方法

    为什么80%的码农都做不了架构师?>>>    关于Json Json:JavaScript Object Notation Json数据是一系列的键值对集合,相对XML体积小 Js ...

  3. python json解析方法_Python 中的 JSON 方式讲解

    Python的dict对象可以直接序列化为JSON的{},不过,很多时候,我们更喜欢用class表示对象,比如定义Student类,然后序列化,代码如下:import json class Stude ...

  4. Qt JSON解析生成笔记

    对于这样一段json {"name": "布衣食","gender": "Male","age": ...

  5. JSON美化工具、JSON格式化、JSON解析方法

    如何直观地查看json格式,推荐一个非常好用的在线工具: 美罗在线工具 http://meiluoli.com 我们可以直观地看到,杂乱无章的json代码变成了有序直观的视图.

  6. java json帮助类_java 写一个JSON解析的工具类

    上面是一个标准的json的响应内容截图,第一个红圈"per_page"是一个json对象,我们可以根据"per_page"来找到对应值是3,而第二个红圈&quo ...

  7. 简单json解析(org.json解析方式)

    简单json解析 json解析方式:org.json json数据 org.json依赖 ​ org.json ​ json ​ ${json.version} json解析程序 (1) 创建Vehi ...

  8. JSON解析(详细)

    1. 了解JSON 简介:JSON(JavaScript Object Notation),即JS对象简谱 , 是一种轻量级的数据交换格式. 进一步理解: JSON和JavaScript的关系:两者之 ...

  9. Qt on Android: http下载与Json解析

    百度提供有查询 ip 归属地的开放接口,当你在搜索框中输入一个 ip 地址进行搜索,就会打开由 ip138 提供的百度框应用,你可以在框内直接输入 ip 地址查询.我查看了页面请求,提取出查询 ip ...

最新文章

  1. 【怎样写代码】实现对象的复用 -- 享元模式(二):解决方案
  2. 泛型技巧系列:简单类型选择器
  3. 用两个矩阵的点积计算神经网络的迭代次数 2-8
  4. lazada新手开店之后,怎样选择正确类目来发布产品?
  5. 中国活性炭行业市场全景调研分析及需求趋势预测报告2022-2028年
  6. 轮询锁使用时遇到的问题与解决方案!
  7. python中不同类型的数据不能相互运算_Python第三课——数据类型与运算(2)
  8. 在网络虚拟化之前部署NFV将使运营商网络面临风险
  9. 中国第一大善人是他!福布斯2019中国慈善榜发布:马云才排第三
  10. db h2 数据类型_H2数据库函数及数据类型概述
  11. Bailian3248 最大公约数【数论】
  12. virtualenv 的使用 —— PyCharm 与 Jupyter Notebook
  13. JavaScript中调皮的undefined
  14. SentencePiece,subword-nmt,bpe算法
  15. 【中文分词】最大熵马尔可夫模型MEMM
  16. 三、Android网络开发
  17. 奇葩!小米手机自带浏览器css兼容问题,强制屏蔽、隐藏类名为 top_box 的元素。
  18. 汇编语言,and、or指令
  19. mysql mmm write vip_MySQLHAbyusingMysql-mmm
  20. android ----- goldfish内核编译

热门文章

  1. java操作office表格(POI与easyExcelg)
  2. MT6166 datasheet,MT6166芯片手册,MT6166完整规格书下载
  3. 机器学习实战——层次聚类算法
  4. 数据库与数据仓库有什么区别
  5. 注解之@link与@see的使用与区别
  6. 冥想第六百四十一天(压力产生反应)
  7. Ubuntu 17.10安装NVIDIA显卡驱动后画面撕裂的解决办法
  8. 解放双手玩玩抖音极速版
  9. 如何下载最新版eclipse
  10. mysql adduser_useradd和adduser的区别