前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt之JSON教程-实战篇

Qt之JSON教程-实战篇

作者头像
Qt君
发布2019-07-15 16:50:56
1.2K0
发布2019-07-15 16:50:56
举报

以实战例子讲述JSON三兄弟的后续故事。

实战一:发送JSON网络请求

  作为JSON老大哥的QJsonValue自知对面的大户人家妹子貌美如花,心里已经打起算盘,先下手为强,后下手遭殃。决定显示下自己的家底,想起这件事,老大哥回想到5年前错过的妹子,当时妹子说我们不适合,大哥问,我对你还不够好么。但妹子说了一句让老大哥彻底伤心的话。做我的男朋友要有QQ会员,可惜你不是。

  老大哥找了QNetworkAccessManager以json的方式发送自己的QQ会员和账号,以表明自己的诚意。

QJsonArray jsonArray;
jsonArray<<1<<2<<3;

QJsonObject jsonObject;
jsonObject["account"] = "xxxxx";
jsonObject["vip"] = "8";
jsonObject["array"] = jsonArray;

QNetworkAccessManager manager;
QNetworkRequest request(QUrl("https://www.example.com"));
request.setRawHeader("Content-Type", "application/json");
QNetworkReply* reply = manager.post(request,                                    QJsonDocument(jsonObject).toJson());QEventLoop eventLoop;
QObject::connect(reply, SIGNAL(finished()), &eventLoop, SLOT(quit()));
eventLoop.exec(); // 进入等待返回,但ui事件循环依然进行。

QByteArray result = reply->readAll();
qDebug()<<result;

  躲着墙角的二哥QJsonObject看到了老大哥的一举一动,暗暗窃喜,还好我也是QQ会员,于是在发送数据处做了些小修改以彰显自己的QQ会员等级。

QNetworkReply* reply = manager.post(request,    R"(       {
           "account": "xxxxx",
           "vip": "8",
           "array": [1, 2, 3]
       }
     )");

  看起来简单明了,妹子肯定是我的了。二哥,心里暗暗窃喜。

  螳螂捕蝉黄雀在后,三弟QJsonArray手拿银子默念,大哥和二哥都不让下弟弟的,尽是QQ会员,还好我不赖,昨天问了爹爹拿钱充了vip8。三弟也发自己的QQ会员过去了,只是方式略有个性。

QNetworkReply* reply = manager.post(request,
 "{\"account\":\"xxxxx\",\"vip\":\"8\",\"array\":[1,2,3]}");

  三兄弟按照昨天约定的时间到村口客栈见面。看到妹子赶紧走上前表示自己的QQ会员等级有多高,大哥还没说出话来就被大妹子打断了,说你装载JSON数据麻烦!转头又说二哥虽然简洁,但过于占地方。三弟自然看到面前这么凶恶的妹子,自然不敢说话低着头说,数据反斜杠转义过多,不利于数据操作。

  三兄弟非常灰心,原来QQ会员也帮不到我了。

实战二:读写json格式的配置文件

  老大哥垂头丧气说,QQ会员也没有用了呀,仍了可惜,不如我们埋了它,当是埋葬我们逝去的青春。二哥三弟听后感动得不要不要的,就赶紧拿了家里祖传的铲子挖泥了。他们将QQ信息放(写)在一个叫config.json的酒壶里。

QJsonObject jsonObject;
jsonObject["account"] = "xxxxx";
jsonObject["password"] = "xxxxx"
jsonObject["vip"] = "8";
QJsonArray jsonArray { 1, 2, 3 };

jsonObject["array"] = jsonArray;
QFile file("config.json");
if (! file.open(QIODevice::WriteOnly)) {
    qDebug()<<"文件打开失败。";
    return false;
}

QByteArray data = QJsonDocument(jsonObject).toJson();
file.write(data);
file.close();

  一天晚上管家拿着铲子在挖泥,手里捧着他们三兄弟前几天放的青春。管家碎碎念说了一句,终于拿到你们的QQ了,还是会员。

QFile file("config.json");
if (! file.open(QIODevice::ReadOnly)) {
    qDebug()<<"文件打开失败。";
    return false;
}

QByteArray data = file.readAll();
QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &jsonError);
if (jsonError.error != QJsonParseError::NoError) {
    qDebug()<<"Json文件解析错误。";
    return false;
}

if (jsonDoc.isObject()) {
    QJsonObject jsonObject = jsonDoc.object();
    qDebug()<<jsonObject;
}
else if (jsonDoc.isArray()) {
    QJsonArray jsonArray = jsonDoc.array();
    qDebug()<<jsonArray;
}
else {
    qDebug()<<"Json文件解析为空。";
}

file.close();
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实战一:发送JSON网络请求
  • 实战二:读写json格式的配置文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档