当前位置: 首页 > news >正文

Qt 中Json的构造和解析简单例子

概述: Qt中使用Json比较方便,不像纯C++需要导入CJson RapidJson JsonCpp等第三方的库,主要使用到QJsonDocument、QJsonObject对象即可

1、如何构造一个json字符串

        假如我们需要构造 {"cmd":"1001","data":{"content":"05:00","type":1}} 这样的json串,在Qt中应该这样编写代码

main.cpp

#include <QApplication>
#include <QWidget>
#include <QDebug>//cc-tools里面生成的动态库
#include "CcJsonTool.h"int main(int argc, char *argv[])
{auto cmd = 1001;auto type = 1;auto content = "05:00";QVariantMap contentMap;contentMap["cmd"] = QString::number(cmd);QVariantMap dataMap;dataMap["type"] = type;dataMap["content"] = content;contentMap["data"] = dataMap;//使用工具构建CcJsonTool jsonTool;auto str = jsonTool.toJsonFromVariantMap(contentMap);qDebug() << "jsonStr:" << str;}

CcJsonTool.h

#pragma once#include "cc_tools_global_config.h"#include <QString>
#include <QObject>
#include <QVariantMap>class CCTOOLS_EXPORT CcJsonTool : public QObject
{Q_OBJECT
public:CcJsonTool(QObject* parent = nullptr);~CcJsonTool();QString toJsonFromVariantMap(QVariantMap dataMap);bool ParseJsonFromString(const QString& jsonData);
};

CcJsonTool.cpp

#include "CcJsonTool.h"#include <QJsonDocument>
#include <QJsonObject>CcJsonTool::CcJsonTool(QObject* parent)
:QObject(parent)
{}CcJsonTool::~CcJsonTool()
{}QString CcJsonTool::toJsonFromVariantMap(QVariantMap dataMap)
{// dataMap: {"cmd":"1001","data":{"content":"05:00","type":1}}QByteArray command = QJsonDocument(QJsonObject::fromVariantMap(dataMap)).toJson(QJsonDocument::Compact);return QString::fromUtf8(command);
}bool CcJsonTool::parseJsonFromString(const QString& jsonData)
{// jsonData: {"cmd":"1001","data":{"content":"05:00","type":1}}QJsonParseError error;auto jsonDoc = QJsonDocument::fromJson(jsonData.toUtf8(), &error);if (error.error != QJsonParseError::NoError){return false;}auto mapContent = jsonDoc.object().toVariantMap();if (!mapContent.contains("cmd") || !mapContent.contains("data")){return false;}auto mapData = mapContent["data"].toMap();if (!mapData.contains("content")){return false;}auto cmd = mapContent["cmd"].toString().toUInt();if (cmd == 1001){auto type = mapData["type"].toInt();auto content = mapData["content"];}return true;
}

2、解析一个Json字符串

main.cpp

#include <QApplication>
#include <QWidget>
#include <QDebug>//cc-tools里面生成的动态库
#include "CcJsonTool.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);//jsonStrauto JsonStr = "{\"cmd\":\"1001\",\"data\":{\"content\":\"05:00\",\"type\":1}}";if (jsonTool.parseJsonFromString(JsonStr)){qDebug() << "parse json str success";}else{qDebug() << "parse json str failed";}return app.exec();
}

3、参考gitee仓库上的测试源码

CcQtApp: Qt测试demo

http://www.lryc.cn/news/309348.html

相关文章:

  • CSS特性
  • springcloud:3.1介绍雪崩和Resilience4j
  • 实现定时器的两种方法:使用windows api定时器 和使用c++11/14 定时器
  • H5:图像标签和路径
  • AI学习(5):PyTorch-核心模块(Autograd):自动求导
  • Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读
  • FaceBook获取广告数据
  • Redis之十:Spring Data Redis --- CrudRepository方式
  • Spring重点记录
  • 代码覆盖率工具Gcovr和Fastcov的性能对比
  • css - flex布局实现div横向滚动
  • 关于在Ubuntu20.04环境下安装GRPC
  • 力扣601 体育馆的人流量
  • ubuntu20.04设置docker容器开机自启动
  • Kubernetes/k8s的核心概念
  • vue 前端预览 Excel 表
  • 【JS】生成N位随机数
  • 2024年FPGA可以进吗
  • 小程序图形:echarts-weixin 入门使用
  • 百度百科人物创建要求是什么?
  • 练习2-线性回归迭代(李沐函数简要解析)
  • 人像背景分割SDK,智能图像处理
  • 100M服务器能同时容纳多少人访问
  • Mysql 的高可用详解
  • Acwing枚举、模拟与排序(一)
  • MySQL的主从同步原理
  • naive-ui-admin 表格去掉工具栏toolbar
  • C++之结构体
  • 分布式ID选型对比(1)
  • T-SQL 高阶语法之存储过程