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

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

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

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

main.cpp

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

cpp 复制代码
#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

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

cpp 复制代码
#include <QApplication>
#include <QWidget>
#include <QDebug>

//cc-tools里面生成的动态库
#include "CcJsonTool.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
  

    //jsonStr
    auto 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

相关推荐
bkspiderx12 小时前
pb2json.hpp 文档:Protobuf 与 JSON 通用转换工具类
json·protobuf·protobuf与json转换
万粉变现经纪人1 天前
何解决PyCharm中pip install安装Python报错ModuleNotFoundError: No module named ‘json’问题
python·pycharm·json·beautifulsoup·scikit-learn·matplotlib·pip
晨欣2 天前
orjson 与 json:实战对比与选型指南(含示例)(GPT-5 回答)
gpt·json
Pi_Qiu_2 天前
Python初学者笔记第二十二期 -- (JSON数据解析)
笔记·python·json
mon_star°2 天前
有趣的 npm 库 · json-server
前端·npm·json
ID_180079054732 天前
淘宝拍立淘按图搜索API接口功能详细说明
大数据·python·json·图搜索算法
cypking3 天前
vue excel转json功能 xlsx
vue.js·json·excel
我又来搬代码了3 天前
【Android】【bug】Json解析错误Expected BEGIN_OBJECT but was STRING...
android·json·bug
山里幽默的程序员4 天前
如何使用Postman无障碍导入JSON文件?详细步骤&工具对照
测试工具·json·postman
米饭的白色5 天前
vscode/trae 的 settings.json 中配置 latex 的一些记录
vscode·json·latex