头文件:
#ifndef JSONSAMPLE_H
#define JSONSAMPLE_H
#include <QObject>
#include <QJsonObject>
#include <QJsonDocument>
#include <QByteArray>
#include <QFile>
#include <QJsonArray>
#include <QDebug>
class jsonSample: QObject
{
Q_OBJECT
public:
jsonSample();
void func_writeJson(const QString &fileName_);
QString func_readJson(const QString &fileName_);
};
#endif // JSONSAMPLE_H
源码文件:
#include "jsonSample.h"
jsonSample::jsonSample()
{
}
void jsonSample::func_writeJson(const QString &fileName_)
{
QJsonObject obj; // root
QJsonArray array;
QJsonObject sub; // subObject
int id = 01;
QString name = "sange";
QString gender = "female";
sub.insert("id", QJsonValue(id));
sub.insert("name", QJsonValue(name));
sub.insert("gender", QJsonValue(gender));
array.append(QJsonValue(sub));
obj.insert("Student", QJsonValue(array));
// 写入到文件, 名字为info.json
QJsonDocument doc(obj);
QByteArray data = doc.toJson();
QFile file("info.json");
bool bRet = file.open(QIODevice::WriteOnly);
if (bRet){
file.write(data);
file.close();
}else{
qDebug() << "Write error!" <<endl;
}
}
QString jsonSample::func_readJson(const QString &fileName_)
{
// 读取所有内容
QFile file("info.json");
file.open(QIODevice::ReadOnly);
QByteArray data = file.readAll();
file.close();
// 解析Json过程
QJsonParseError parseError;
QJsonDocument doc = QJsonDocument::fromJson(data, &parseError);
if (parseError.error != QJsonParseError::NoError){
qDebug() <<"error:" << parseError.errorString();
return "";
}
QJsonObject obj = doc.object();
if (obj.contains("Student")){
QJsonValue arrayTemp = obj.value("Student");
QJsonArray array = arrayTemp.toArray();
QJsonValue sub = array.at(0); // 因为里面就一个元素, 如果有多个元素, 可以通过array.size()便利
QJsonObject subObj = sub.toObject();
//--------------------
QJsonValue idTemp = subObj.value("id");
int id = idTemp.toInt();
QJsonValue nameTemp = subObj.value("name");
QString name = nameTemp.toString();
QJsonValue genderTemp = subObj.value("gender");
QString gender = genderTemp.toString();
return QString("%1: %2 - %3").arg(id).arg(name).arg(gender);
}
return "";
}
调用:
#include "MainWindow.h"
#include "ui_MainWindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
tempJson = new jsonSample;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButtonWrite_clicked()
{
tempJson->func_writeJson("");
}
void MainWindow::on_pushButtonRead_clicked()
{
QString strJson = tempJson->func_readJson("");
ui->textEdit->append(strJson);
}