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

相关推荐
小吕学编程7 小时前
Jackson使用详解
java·javascript·数据库·json
双叶8369 小时前
(C语言)超市管理系统 (正式版)(指针)(数据结构)(清屏操作)(文件读写)(网页版预告)(html)(js)(json)
c语言·javascript·数据结构·html·json
电商数据girl1 天前
酒店旅游类数据采集API接口之携程数据获取地方美食品列表 获取地方美餐馆列表 景点评论
java·大数据·开发语言·python·json·旅游
bing_1582 天前
Spring MVC 根据请求头 (如 Accept) 怎么返回 JSON 或 XML 数据?
spring·json·mvc
半路_出家ren2 天前
python处理异常,JSON
python·json·异常处理
傻小胖2 天前
json-server的用法-基于 RESTful API 的本地 mock 服务
后端·json·restful
search72 天前
配置文件介绍xml、json
xml·json
Chandler243 天前
Go语言:json 作用和语法
开发语言·golang·json
Hfc.4 天前
docker-daemon.json
docker·容器·json
UpUpUp……5 天前
Linux--JsonCpp
linux·运维·服务器·c++·笔记·json