需要的头文件
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonParseError>
转成JSON
void MainWindow::toJson()
{
QJsonArray array;
array.append(QJsonValue(true));
array.append(QJsonValue(3.14));
array.append(QJsonValue(3));
array.append(QJsonValue("abc"));
QJsonArray subArray = {"subArr", 123, 456};
array.append(QJsonValue(subArray));
QJsonObject obj1
{
{"name", "lufy"},
{"age", 16}
};
QJsonArray arr1 = {"hello", "world"};
obj1.insert("details",arr1);
array.append(QJsonValue(obj1));
QJsonObject obj2;
obj2.insert("name", "zuoluo");
obj2.insert("age", 16);
QJsonObject obj3
{
{"name", "nami"},
{"age", 16}
};
obj2.insert("person", obj3);
array.append(QJsonValue(obj2));
m_doc.setArray(array);
QString strJaon(m_doc.toJson(QJsonDocument::Indented).constData());
ui->json_txt->setText(strJaon);
}
解析JSON
void MainWindow::fromJson()
{
QString path = QFileDialog::getOpenFileName(this, "打开JSON文件", "./", "Json文件 (*.json)");
if(path.isEmpty())
return;
QFile file(path);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qWarning() << "打开文件失败!";
return;
}
QByteArray arr = file.readAll();
file.close();
if(arr.isEmpty())
return;
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(arr, &err);
if(doc.isEmpty())
{
qWarning() << err.errorString();
}
if(doc.isArray())
{
jsonParse(QJsonValue(doc.array()));
}
else if(doc.isObject())
{
jsonParse(QJsonValue(doc.object()));
}
}
MainWindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonParseError>
#include <QDebug>
#include <QFileDialog>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void toJson();
void fromJson();
void save();
private:
Ui::MainWindow *ui;
QJsonDocument m_doc;
void jsonParse(const QJsonValue &value);
};
#endif
MainWindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->to_json_btn, &QPushButton::clicked, this, &MainWindow::toJson);
connect(ui->from_json_btn, &QPushButton::clicked, this, &MainWindow::fromJson);
connect(ui->save_btn, &QPushButton::clicked, this, &MainWindow::save);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::toJson()
{
QJsonArray array;
array.append(QJsonValue(true));
array.append(QJsonValue(3.14));
array.append(QJsonValue(3));
array.append(QJsonValue("abc"));
QJsonArray subArray = {"subArr", 123, 456};
array.append(QJsonValue(subArray));
QJsonObject obj1
{
{"name", "lufy"},
{"age", 16}
};
QJsonArray arr1 = {"hello", "world"};
obj1.insert("details",arr1);
array.append(QJsonValue(obj1));
QJsonObject obj2;
obj2.insert("name", "zuoluo");
obj2.insert("age", 16);
QJsonObject obj3
{
{"name", "nami"},
{"age", 16}
};
obj2.insert("person", obj3);
array.append(QJsonValue(obj2));
m_doc.setArray(array);
QString strJaon(m_doc.toJson(QJsonDocument::Indented).constData());
ui->json_txt->setText(strJaon);
}
void MainWindow::fromJson()
{
QString path = QFileDialog::getOpenFileName(this, "打开JSON文件", "./", "Json文件 (*.json)");
if(path.isEmpty())
return;
QFile file(path);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qWarning() << "打开文件失败!";
return;
}
QByteArray arr = file.readAll();
file.close();
if(arr.isEmpty())
return;
QJsonParseError err;
QJsonDocument doc = QJsonDocument::fromJson(arr, &err);
if(doc.isEmpty())
{
qWarning() << err.errorString();
}
if(doc.isArray())
{
jsonParse(QJsonValue(doc.array()));
}
else if(doc.isObject())
{
jsonParse(QJsonValue(doc.object()));
}
}
void MainWindow::save()
{
if(m_doc.isEmpty())
return;
QString path = QFileDialog::getSaveFileName(this, "保存JSON数据", "test.json", "Json文件 (*.json)");
if(path.isEmpty())
return;
QFile file(path);
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
file.write(m_doc.toJson(QJsonDocument::Indented));
file.close();
}
else
{
qWarning() << "保存JSON数据失败!";
}
}
void MainWindow::jsonParse(const QJsonValue &value)
{
switch (value.type())
{
case QJsonValue::Null:
{
break;
}
case QJsonValue::Bool:
{
break;
}
case QJsonValue::Double:
{
break;
}
case QJsonValue::String:
{
break;
}
case QJsonValue::Array:
{
QJsonArray arr = value.toArray();
foreach(auto v , arr)
{
jsonParse(v);
}
break;
}
case QJsonValue::Object:
{
QJsonObject obj = value.toObject();
QStringList keys = obj.keys();
foreach(auto key , keys)
{
jsonParse(obj[key]);
}
break;
}
case QJsonValue::Undefined:
{
break;
}
}
}