QT笔记——QJson

头文件:

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonParseError>
#include <QJsonValue>

QJsonDocument 类用于读和写 JSON 文档。
QJsonArray 类封装了一个 JSON 数组。
QJsonObject 类封装了一个 JSON 对象。
QJsonValue 类封装了一个值。
QJsonParseError 类用于在 JSON 解析中报告错误。

jsonObject 的输出顺序 和 插入顺序不一致
jsonArray 的输出顺序 和 插入顺序是一致的

jsonValue可以判断值是什么类型 然后 将值转化成什么类型
在这里插入图片描述
在这里插入图片描述

1.简单的jsonObject:
1.1简单的jsonObject输出到文件

QJsonObject json;
json.insert("Name", "Qt");
json.insert("From", 1991);
json.insert("Cross Platform", true);

// 构建 JSON 文档
QJsonDocument document;
document.setObject(json);
byteArray2 = document.toJson(QJsonDocument::Compact);
QString strJson(byteArray2);
qDebug() << strJson;

1.2解析读取jsonObject

QJsonParseError jsonError;
QJsonDocument document = QJsonDocument::fromJson(byteArray2, &jsonError);
if (!document.isNull() && jsonError.error == QJsonParseError::NoError)
	{
		//是否有对象
		if (document.isObject())
		{
			//是否有指定的Key
			QJsonObject object = document.object();
			if (object.contains("Name"))
			{
				//是否指定的Value 为字符串
				QJsonValue value = object.value("Name");
				if (value.isString())
				{
					QString strName = value.toString();
					qDebug() << "Name:" << strName;
				}
			}

			if (object.contains("From"))
			{
				QJsonValue value = object.value("From");
				if (value.isDouble())
				{
					int nFrom = value.toVariant().toInt();
					qDebug() << "From:" << nFrom;
				}
			}

			if (object.contains("Cross Platform"))
			{
				QJsonValue value = object.value("Cross Platform");
				if (value.isBool())
				{
					bool bCrossPlatform = value.toBool();
					qDebug() << "Platform:" << bCrossPlatform;
				}
			}
		}
	}

1.3文件输出和代码输出
在这里插入图片描述
在这里插入图片描述
2.简单的jsonArray:
2.1简单的jsonArray输出到文件

QJsonArray jsonArray;
jsonArray.append(8.17);
jsonArray.append(true);
jsonArray.append("lion_cxq");

QJsonDocument jsonDoc;
jsonDoc.setArray(jsonArray);

byteArray3 = jsonDoc.toJson(QJsonDocument::Compact);
qDebug() << QString(byteArray3);

2.2解析读取jsonArray

QJsonParseError jsonError;
	QJsonDocument jsonDoc = QJsonDocument::fromJson(byteArray3, &jsonError);
	if (!jsonDoc.isNull() && jsonError.error == QJsonParseError::NoError)
	{
		if (jsonDoc.isArray())
		{
			QJsonArray jsonArray = jsonDoc.array();
			int nSize = jsonArray.size();
			for (int i = 0; i < nSize; i++)
			{

				QJsonValue value = jsonArray.at(i);
				if (value.type() == QJsonValue::String)
				{
					QString strName = value.toString();
					qDebug() << strName;
				}

				if (value.type() == QJsonValue::Double)
				{
					double dValue = value.toDouble();
					qDebug() << dValue;
				}

				if (value.type() == QJsonValue::Bool)
				{
					bool bValue = value.toBool();
					qDebug() << bValue;
				}
			}
		}
	}

2.3文件输出和代码输出
在这里插入图片描述
在这里插入图片描述
3.jsonArray 和 jsonObject 结合:
3.1jsonArray 和 jsonOject输出到文件

QJsonObject page;
page.insert("Developers", "https://www.qt.io/developers/");
page.insert("Download", "https://www.qt.io/download/");
page.insert("Home", "https://www.qt.io/");

QJsonArray version;
version.append(4.8);
version.append(5.2);
version.append(5.7);

QJsonObject jsonObject;
jsonObject.insert("Company", "Digia");
jsonObject.insert("From", 1991);
jsonObject.insert("Name", "Qt");
jsonObject.insert("Page", QJsonValue(page));
jsonObject.insert("Version", QJsonValue(version));

QJsonDocument jsonDoc;
jsonDoc.setObject(jsonObject);

byteArray4 = jsonDoc.toJson();
qDebug() << QString(byteArray4);

3.2解析和读取 jsonArray 和 jsonOject

QJsonParseError jsonError;
QJsonDocument jsonDoc = QJsonDocument::fromJson(byteArray4, &jsonError);
if (!jsonDoc.isNull() && jsonError.error == QJsonParseError::NoError)
	{
		//是否有对象
		if (jsonDoc.isObject())
		{
			//对应的Key的alue值
			QJsonObject jsonObject = jsonDoc.object();
			if (jsonObject.contains("Company"))
			{
				QJsonValue jsonValue = jsonObject.value("Company");
				if (jsonValue.isString())
				{
					QString strCompany = jsonValue.toString();
					qDebug() << strCompany;
				}
			}

			if (jsonObject.contains("From"))
			{
				QJsonValue jsonValue = jsonObject.value("From");
				if (jsonValue.toDouble())
				{
					int iFrom = jsonValue.toInt();
					qDebug() << iFrom;
				}
			}

			if (jsonObject.contains("Name"))
			{
				QJsonValue jsonValue = jsonObject.value("Name");
				if (jsonValue.isString())
				{
					QString strName = jsonValue.toString();
					qDebug() << strName;
				}
			}

			if (jsonObject.contains("Page"))
			{
				QJsonValue jsonValue = jsonObject.value("Page");
				if (jsonValue.isObject())
				{

					QJsonObject jsonObject1 = jsonValue.toObject();
					if (jsonObject1.contains("Developers"))
					{
						QJsonValue jsonValue1 = jsonObject1.value("Developers");
						if (jsonValue1.isString())
						{
							QString strDevlopers = jsonValue1.toString();
							qDebug() << strDevlopers;
						}
					}

					if (jsonObject1.contains("Download"))
					{
						QJsonValue jsonValue1 = jsonObject1.value("Download");
						if (jsonValue1.isString())
						{
							QString strDownload = jsonValue1.toString();
							qDebug() << strDownload;
						}
					}

					if (jsonObject1.contains("Home"))
					{
						QJsonValue jsonValue1 = jsonObject1.value("Home");
						if (jsonValue1.isString())
						{
							QString strHome = jsonValue1.toString();
							qDebug() << strHome;
						}
			     	}
				}
			}

			if (jsonObject.contains("Version"))
			{
				QJsonValue jsonValue1 = jsonObject.value("Version");
				if (jsonValue1.isArray())
				{
					QJsonArray jsonArray = jsonValue1.toArray();
					int sizeArray = jsonArray.size();
					for (int i = 0; i < sizeArray; ++i)
					{
						QJsonValue value = jsonArray.at(i);
						if (value.isDouble())
						{
							double dValue = value.toDouble();
							qDebug() << dValue;
						}
					}
				}
			}

		}
	}

3.3文件输出 和代码输出结果
在这里插入图片描述
在这里插入图片描述
完整代码:

#pragma once

#include <QtWidgets/QWidget>
#include "ui_QJsonArrayDifficultTest.h"

class QJsonArrayDifficultTest : public QWidget
{
	Q_OBJECT

public:
	QJsonArrayDifficultTest(QWidget *parent = Q_NULLPTR);
	~QJsonArrayDifficultTest();
	void QJsonArrayDifficultTest1();

	void QJsonArrayDifficultTest2();
	void resolutionArrayDifficultTest2();

	void QJsonArrayDifficultTest3();
	void resolutionArrayDifficultTest3();

	void QJsonArrayDifficultTest4();
	void resolutionArrayDifficultTest4();
private:
	Ui::QJsonArrayDifficultTestClass ui;
	QByteArray byteArray2;
	QByteArray byteArray3;
	QByteArray byteArray4;
};
#include "QJsonArrayDifficultTest.h"
#include <QFile>
#include <QDebug>
#include <QJsonArray>
#include <QJsonObject>
#include <QDateTime>
#include <QThread>
#include <QJsonDocument>
#include <QJsonParseError>
QJsonArrayDifficultTest::QJsonArrayDifficultTest(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);
	QJsonArrayDifficultTest1();

	QJsonArrayDifficultTest2();
	resolutionArrayDifficultTest2();

	QJsonArrayDifficultTest3();
	resolutionArrayDifficultTest3();

	QJsonArrayDifficultTest4();
	resolutionArrayDifficultTest4();
}

QJsonArrayDifficultTest::~QJsonArrayDifficultTest()
{

}

void QJsonArrayDifficultTest::QJsonArrayDifficultTest1()
{
	QFile file("./jsonArrayDifficlutTset1.json");
	if (file.open(QIODevice::ReadWrite))
		qDebug() << "file open error";
	else
		qDebug() << "file open";

	file.resize(0);
	QJsonArray jsonArray;

	for (int i = 0; i < 3; i++)
	{
		QJsonObject jsonObject;
		jsonObject.insert("name", QString::number(i + 1));
		jsonObject.insert("age", i + 18);
		jsonObject.insert("time", QDateTime::currentDateTime().toString("yyyy-MM-dd  hh-MM-ss"));
		jsonArray.append(jsonObject);
	}

	QJsonObject jsonObject;
	jsonObject.insert("number", jsonArray.size());
	jsonArray.append(jsonObject);

	QJsonDocument jsonDoc;
	jsonDoc.setArray(jsonArray);

	file.write(jsonDoc.toJson());
	file.close();
	qDebug() << "write to file";
	if (jsonDoc.isArray())
		qDebug() << QStringLiteral("有数组") << jsonDoc.array();

	if (jsonDoc.isObject())
		qDebug() << QStringLiteral("有对象");
	else
		qDebug() << QStringLiteral("无对象") << jsonDoc.object();

	if (!jsonDoc.isNull())
		qDebug() << QStringLiteral("不为空") << jsonDoc.toJson(QJsonDocument::Compact);

	if (!jsonDoc.isEmpty())
	{
		 QByteArray byteArray = jsonDoc.toJson(QJsonDocument::Indented);
		qDebug() << QStringLiteral("不为空") << QString(byteArray);
	}


}

void QJsonArrayDifficultTest::QJsonArrayDifficultTest2()
{
	QFile file("./jsonArrayDifficlutTset2.json");
	if (file.open(QIODevice::ReadWrite))
		qDebug() << "file open error";
	else
		qDebug() << "file open";


	file.resize(0);

	QJsonObject json;
	json.insert("Name", "Qt");
	json.insert("From", 1991);
	json.insert("Cross Platform", true);

	QJsonDocument document;
	document.setObject(json);
	byteArray2 = document.toJson(QJsonDocument::Compact);
	QString strJson(byteArray2);

	qDebug() << strJson;

	file.write(document.toJson());
	file.close();
	qDebug() << "write to file";
}

void QJsonArrayDifficultTest::resolutionArrayDifficultTest2()
{
	QJsonParseError jsonError;
	QJsonDocument document = QJsonDocument::fromJson(byteArray2, &jsonError);
	if (!document.isNull() && jsonError.error == QJsonParseError::NoError)
	{
		if (document.isObject())
		{
			QJsonObject object = document.object();
			if (object.contains("Name"))
			{
				QJsonValue value = object.value("Name");
				if (value.isString())
				{
					QString strName = value.toString();
					qDebug() << "Name:" << strName;
				}
			}

			if (object.contains("From"))
			{
				QJsonValue value = object.value("From");
				if (value.isDouble())
				{
					int nFrom = value.toVariant().toInt();
					qDebug() << "From:" << nFrom;
				}
			}

			if (object.contains("Cross Platform"))
			{
				QJsonValue value = object.value("Cross Platform");
				if (value.isBool())
				{
					bool bCrossPlatform = value.toBool();
					qDebug() << "Platform:" << bCrossPlatform;
				}
			}
		}
	}


}

void QJsonArrayDifficultTest::QJsonArrayDifficultTest3()
{
	QFile file("./jsonArrayDifficlutTset3.json");
	if (file.open(QIODevice::ReadWrite))
		qDebug() << "file open error";
	else
		qDebug() << "file open";

	file.resize(0);

	QJsonArray jsonArray;
	jsonArray.append(8.17);
	jsonArray.append(true);
	jsonArray.append("lion_cxq");

	QJsonDocument jsonDoc;
	jsonDoc.setArray(jsonArray);

	byteArray3 = jsonDoc.toJson(QJsonDocument::Compact);
	qDebug() << QString(byteArray3);

	file.write(jsonDoc.toJson());
	file.close();
	qDebug() << "wirte finish";
}

void QJsonArrayDifficultTest::resolutionArrayDifficultTest3()
{
	QJsonParseError jsonError;
	QJsonDocument jsonDoc = QJsonDocument::fromJson(byteArray3, &jsonError);
	if (!jsonDoc.isNull() && jsonError.error == QJsonParseError::NoError)
	{
		if (jsonDoc.isArray())
		{
			QJsonArray jsonArray = jsonDoc.array();
			int nSize = jsonArray.size();
			for (int i = 0; i < nSize; i++)
			{
				QJsonValue value = jsonArray.at(i);
				if (value.type() == QJsonValue::String)
				{
					QString strName = value.toString();
					qDebug() << strName;
				}

				if (value.type() == QJsonValue::Double)
				{
					double dValue = value.toDouble();
					qDebug() << dValue;
				}

				if (value.type() == QJsonValue::Bool)
				{
					bool bValue = value.toBool();
					qDebug() << bValue;
				}
			}
		}
	}
}

void QJsonArrayDifficultTest::QJsonArrayDifficultTest4()
{
	QFile file("./jsonArrayDifficultTest4.json");
	if (file.open(QIODevice::ReadWrite))
	{
		qDebug() << "wirte read json file";
	}
	else
	{
		qDebug() << "qita file";
		return;
	}

	file.resize(0);

	QJsonObject page;
	page.insert("Developers", "https://www.qt.io/developers/");
	page.insert("Download", "https://www.qt.io/download/");
	page.insert("Home", "https://www.qt.io/");

	QJsonArray version;
	version.append(4.8);
	version.append(5.2);
	version.append(5.7);

	QJsonObject jsonObject;
	jsonObject.insert("Company", "Digia");
	jsonObject.insert("From", 1991);
	jsonObject.insert("Name", "Qt");
	jsonObject.insert("Page", QJsonValue(page));
	jsonObject.insert("Version", QJsonValue(version));

	QJsonDocument jsonDoc;
	jsonDoc.setObject(jsonObject);

	 byteArray4 = jsonDoc.toJson();
	qDebug() << QString(byteArray4);

	file.write(jsonDoc.toJson());
	file.close();
	qDebug() << "write file";
}

void QJsonArrayDifficultTest::resolutionArrayDifficultTest4()
{
	QJsonParseError jsonError;
	QJsonDocument jsonDoc = QJsonDocument::fromJson(byteArray4, &jsonError);
	if (!jsonDoc.isNull() && jsonError.error == QJsonParseError::NoError)
	{
		//是否有对象
		if (jsonDoc.isObject())
		{
			//对应的Key的alue值
			QJsonObject jsonObject = jsonDoc.object();
			if (jsonObject.contains("Company"))
			{
				QJsonValue jsonValue = jsonObject.value("Company");
				if (jsonValue.isString())
				{
					QString strCompany = jsonValue.toString();
					qDebug() << strCompany;
				}
			}

			if (jsonObject.contains("From"))
			{
				QJsonValue jsonValue = jsonObject.value("From");
				if (jsonValue.toDouble())
				{
					int iFrom = jsonValue.toInt();
					qDebug() << iFrom;
				}
			}

			if (jsonObject.contains("Name"))
			{
				QJsonValue jsonValue = jsonObject.value("Name");
				if (jsonValue.isString())
				{
					QString strName = jsonValue.toString();
					qDebug() << strName;
				}
			}

			if (jsonObject.contains("Page"))
			{
				QJsonValue jsonValue = jsonObject.value("Page");
				if (jsonValue.isObject())
				{

					QJsonObject jsonObject1 = jsonValue.toObject();
					if (jsonObject1.contains("Developers"))
					{
						QJsonValue jsonValue1 = jsonObject1.value("Developers");
						if (jsonValue1.isString())
						{
							QString strDevlopers = jsonValue1.toString();
							qDebug() << strDevlopers;
						}
					}

					if (jsonObject1.contains("Download"))
					{
						QJsonValue jsonValue1 = jsonObject1.value("Download");
						if (jsonValue1.isString())
						{
							QString strDownload = jsonValue1.toString();
							qDebug() << strDownload;
						}
					}

					if (jsonObject1.contains("Home"))
					{
						QJsonValue jsonValue1 = jsonObject1.value("Home");
						if (jsonValue1.isString())
						{
							QString strHome = jsonValue1.toString();
							qDebug() << strHome;
						}
					}
				}
			}

			if (jsonObject.contains("Version"))
			{
				QJsonValue jsonValue1 = jsonObject.value("Version");
				if (jsonValue1.isArray())
				{
					QJsonArray jsonArray = jsonValue1.toArray();
					int sizeArray = jsonArray.size();
					for (int i = 0; i < sizeArray; ++i)
					{
						QJsonValue value = jsonArray.at(i);
						if (value.isDouble())
						{
							double dValue = value.toDouble();
							qDebug() << dValue;
						}
					}
				}
			}
		}
	}
}

参考博客:
https://www.21ic.com/tougao/article/11375.html

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值