首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Qt Socket Server 收发JSON

Qt Socket Server 收发JSON

作者头像
用户5908113
发布于 2020-06-29 08:41:26
发布于 2020-06-29 08:41:26
1.6K00
代码可运行
举报
文章被收录于专栏:Pou光明Pou光明
运行总次数:0
代码可运行

之前文章写过Linux C Socket 收发Json数据,最近用Qt Server实现了一遍。给我自己的感觉就是cJSON接口与Qt封装的一些接口是共通的:Qt 封装了QJsonObject来对Json对象操作,如增删改查;封装了QJsonDocument来进行一些序列化与反序列化的操作(可能不准确)。

重要消息:虽然明天是端午节,但是还是要去公司学习。。。

后续可能会在公众号中写一点儿理财相关的知识,待定中......

程序中用到了Qt 的Socket Server,但主要介绍下Qt中如何操作Json数据,将接收到的字节流转换为Json对象,又如何将Json对象转换为字节流。

一、 程序介绍

1. Json 操作相关函数

为了与C语言写的对比,同样写了3个函数:

Qt :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int ParseRecvJsonData(const  QByteArray &recvdata, int *outLogLevel);
int WriteLogLevelToFileJson(const QString &filePathName, const int logLevel);
int CreateRespondInfoJson(QByteArray *respondInfoJson, 
                          const  QByteArray &recvJsonData,
                          const int writeFileRet);

C:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int ParseRecvJsonData(const char * recvdata, int *outLogLevel);
int WriteLogLevelToFileJson(const char *filePathName, int logLevel);
int CreateRespondInfoJson(char *respondInfoJson, 
                          const char* recvJsonData,
                          const int writeFileRet);

解析Json字节流为Json对象,提取所需信息

将所需信息组装成Json对象写入配置文件

将字节流转换为Json对象并添加数据,组装成响应信息

2. Qt 中对Json操作的具体实现

直接加注释进行说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int TcpServerRecvImage::CreateRespondInfoJson(QByteArray *respondInfoJson,
               const QByteArray &recvJsonData, const int writeFileRet)
{
//使用QJsonDocument判断字节流能否转成Json对象
    QJsonParseError jsonError;
    QJsonDocument jsonRecvData(QJsonDocument::fromJson(recvJsonData, &jsonError));

    if(jsonError.error != QJsonParseError::NoError)
    {
        qDebug() << "parse json error!";
        return -1;
    }
//通过QsonDocument将字节流转为Json对象
    QJsonObject rootObject = jsonRecvData.object();
//向Json对象中追加数据
    rootObject.insert("Result","FAIL");

    if(0 == writeFileRet)
    {
//修改对应数据;可以思考下是如何实现修改前与修改后数据所占空间不同
        rootObject["Result"] = "SUCCESS";
    }
//将Json对象转换为字节流
    QJsonDocument documentJson;
    documentJson.setObject(rootObject);
    QByteArray bytearrayJson = documentJson.toJson();

    respondInfoJson->clear();
    respondInfoJson->append(bytearrayJson);

    return 0;
}

int TcpServerRecvImage::WriteLogLevelToFileJson(const QString &filePathName,
                           const int logLevel)
{
//Qt文件操作
    QFile f(filePathName);
    if(!f.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        qDebug() << "Open failed.";
        return -1;
    }

    // create JSON Object
    QJsonObject logLevelJson;
    logLevelJson.insert("logLevel",QString::number(logLevel));

    QJsonDocument documentJson;
    documentJson.setObject(logLevelJson);
    QByteArray bytearrayJson = documentJson.toJson();
//使用QTextStream,简化文件操作
    QTextStream txtWrite(&f);
    txtWrite << bytearrayJson;

    f.close();

    return 0;
}

3. 程序效果

客户端程序是之前的C语言写的

4. 一点感想

最近一段时间的状态就是不断看书,写Demo程序,并将以前看的一些知识结合起来,不断提炼总结,有一种这就是我想要的生活的错觉

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Qt之JSON教程-实战篇
  作为JSON老大哥的QJsonValue自知对面的大户人家妹子貌美如花,心里已经打起算盘,先下手为强,后下手遭殃。决定显示下自己的家底,想起这件事,老大哥回想到5年前错过的妹子,当时妹子说我们不适合,大哥问,我对你还不够好么。但妹子说了一句让老大哥彻底伤心的话。做我的男朋友要有QQ会员,可惜你不是。
Qt君
2019/07/12
1.5K0
Qt之JSON教程-实战篇
Qt之Qfile类
很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件等等,甚至某些应用程序的就是为了操作文件,像WPS Office。基于此Qt框架中专门提供了对文件操作的类:QFile。
破晓的历程
2025/05/15
1730
Qt之Qfile类
QT软件开发: 解析JSON数据(QJsonX)
本篇文章介绍使用QJsonDocument、QJsonObject、QJsonArray来解析JSON数据。
DS小龙哥
2022/01/12
1.1K0
50.Qt-QJsonDocument读写json
QJsonDocument: 提供一种读取和写入JSON文档的方法,可以通过它的的成员函数array()或object()检索文档中包含的数组或对象,然后读取JSON数据,或者修改数据。 QJsonObject: 封装了一个JSON对象, 可以使用它的成员函数size()、insert()和remove()来对修改JSON数据. QJsonArray: 封装了一个JSON数组,用来实现JSON数组的 1.解析JSON-示例 注意:JSON中的Key命名不能相同,否则的话会覆盖掉,比如: { "F
诺谦
2019/11/26
1.7K0
Qt之JSON教程-使用篇
  一天,三兄弟玩得甚欢,管家有些烦恼,三兄弟年龄不小了,还整天捣蛋,苦不堪言,是时候帮它们解决人生大事了,让他们得老婆来管这三兄弟。管家暗暗窃喜。老夫赶紧将他们的资料(数据)转换为字符串发给对面Web端的大户人家先。
Qt君
2019/07/15
4.8K1
Qt实现软件自动更新的一种简单方法
最近在学习Qt开发上位机,想实现一个检查更新的功能,网上搜索了一大圈,发现实现过程都很复杂,关键是代码看不懂,所以就自己开发一种简单的方式来实现。实现效果如下:
单片机点灯小能手
2020/07/16
3.2K0
Qt之JSON生成与解析
原文链接:https://yq.aliyun.com/articles/119861
acoolgiser
2019/08/14
3.5K0
Qt 学习之路 2(64):使用 QJsonDocument 处理 JSON
本文转载自豆子的Qt 学习之路2的博客Qt 学习之路 2(64):使用 QJsonDocument 处理 JSON
ccf19881030
2021/04/19
5.2K0
Qt 学习之路 2(64):使用 QJsonDocument 处理 JSON
Qt平台下使用QJson构建JSON字符串
上两篇文章介绍了使用cJSON库解析和构建JSON字符串和Qt平台下使用QJson解析JSON字符串
单片机点灯小能手
2020/07/16
1.5K0
Qt - 聊天室发送图片/文件
其中,关键点为,tcp在实际的场景中,会遇到拆包,丢包,沾包等一些意外的情况,当图片文件比较大的时候,tcp的单帧数据有限,必然会发生拆包现象,所以我们在接收时需要考虑从组包的情况,把完整的图片数据提取出来。
何其不顾四月天
2023/03/10
9660
Qt - 聊天室发送图片/文件
基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放
如果有一天,这个代码不能用了,要注意查询的值对不对,酷狗可能是为了防止被爬,data,info,等等这些值有可能被更换成别的,要观察json。
花狗Fdog
2020/10/28
3.2K0
基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放
Qt中使用Json
其中使用QJsonDocument 可以用来序列化和反序列化的过程,进而实现文件读写、socket的读写。
全栈程序员站长
2022/07/09
1.4K0
【代码写春联】快过年了, 设计一个春联自动生成器, 给大家助助兴
春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联;在春节前夕,会用大红纸张,加上浓墨书写祝福词语,在春节当天贴于门框两边,寓意着一年吉祥如意,还会将福字倒转贴于门上,有"福到临门"的意思。为了方便找到合适的春联句子,我这里就采用现成的自然语言处理接口实现了一个自动生成春联的软件,输入提示词就可以完成春联的生成,方便写春联时参考。
DS小龙哥
2022/02/17
1.4K0
【代码写春联】快过年了, 设计一个春联自动生成器, 给大家助助兴
【转】Qt之JSON保存与读取
许多游戏提供保存功能,使得玩家在游戏中的进度可以被保存,并在以后再玩的时候进行加载。保存游戏的过程通常涉及将每个游戏对象的成员变量序列化为文件。要实现这个功能,可以采取许多格式,其中之一就是 JSON - 使用 QJsonDocument。如果不希望保存的文件可读,或者不需要保持文件大小,还能够以二进制格式序列化文档,这就厉害了O(∩_∩)O。
饶文津
2020/06/02
1.9K0
06 json数据解析和列表控件
功能:将QJsonDocment转换 成QByteArray,以便将数据写入到json文件中
天天Lotay
2023/10/15
4800
06 json数据解析和列表控件
PyQt5 Json解析、创建
最近做了几个小程序,用到了QJson 相关的一些代码,想着在python下测试一下,折腾一番还是整理出来了。
何其不顾四月天
2023/03/10
8520
14.QT-QFile文件,QBuffer缓冲区,QDir目录,QFileSystemWatcher文件系统监视
QFile Qt中所有与IO相关的类都继承于QIODevice,继承图如下所示: 其中QFile类便是用于文件操作的类 在QT中,将文件当做一种特殊的外部设备对待(比如:串口,usb等就是外部设备)
诺谦
2018/05/28
2.4K0
Qt file文件操作详解
很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件等等,甚至某些应用程序的就是为了操作文件,像WPS Office。基于此Qt框架中专门提供了对文件操作的类:QFile。
破晓的历程
2025/05/15
2140
Qt file文件操作详解
一种基于QT应用程序封装JsonRpc2.0协议请求对象的便捷方法
之前一直用的是cJSON库来封装和解析,写久了感觉实在太丑,又难维护,于是还是研究下QT原生的QJson是否有更优雅的方法来封装一些Json对象,果不其然,通过阅读QT开发文档发现,QT封装的Json非常强大,其中Json对象可以有很多种形式,我们看到qjsonobject.h中:
杨源鑫
2023/10/09
5130
一种基于QT应用程序封装JsonRpc2.0协议请求对象的便捷方法
C/C++ Qt 运用JSON解析库 [解析篇]
JSON是一种简单的轻量级数据交换格式,Qt库为JSON的相关操作提供了完整的类支持,使用JSON解析文件之前需要先通过TextStream流将文件读入到字符串变量内,然后再通过QJsonDocument等库对该JSON格式进行解析,以提取出我们所需字段。
王 瑞
2022/12/22
2K0
相关推荐
Qt之JSON教程-实战篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档