头文件:
#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;
}
}
}
}
}
}
}