Qt-Web混合开发-Qt使用内置json库读写json示例🍏
文章目录
- Qt-Web混合开发-Qt使用内置json库读写json示例🍏
- 1、概述🍓
- 2、实现效果🍅
- 3、实现功能🥝
- 4、关键代码🌽
- 5、源代码🍆
更多精彩内容 |
---|
👉个人内容分类汇总 👈 |
👉Qt - Web混合开发👈 |
1、概述🍓
- JSON: JavaScript Object Notation(Javascript 对象表示法);
- JSON是一种轻量级的数据交换格式。易于人阅读和编写,类似 XML,比 XML 更小、更快,更易解析;
- JSON是一种对源自Javascript的对象数据进行编码的格式,现在在互联网上被广泛用作数据交换格式;
- 现在很多配置文件也喜欢使用JSON格式而不是使用Ini,例如:VSCode的配置文件就是JSON格式,便于阅读,结构清晰、可以添加注释信息。
- Qt提供了JSON读写的API,使用起来非常方便(虽然性能相较于常用的JSON库会差一些),在这个示例中演示了如何使用Qt自带的JSON库【QJsonArray、QJsonDocument、QJsonObject、QJsonValue】读写JSON数据。
- QJsonDocument:提供了一种读写JSON文档的方法;
- QJsonArray:用于读写JSON数组类型数据,例如:
[123, 456, "abc"]
; - QJsonObject:用于读写JSON对象类型数据(键值对),QJsonObject可以转换为QVariantMap,也可以从QVariantMap转换;
- QJsonValue:用于封装JSON值,支持Null、Bool、Double、String、Array、Object、Undefined六种类型数据;
2、实现效果🍅
3、实现功能🥝
- 实现生成json数据,插入json数组、json对象以及各种json支持的数据类型;
- 将json数据保存到json文件中;
- 从json文件中读取json数据,并使用【递归】的方式解析json数据。
4、关键代码🌽
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
void jsonParse(const QJsonValue& value);
private slots:
void on_but_create_clicked();
void on_but_parse_clicked();
void on_but_save_clicked();
private:
Ui::Widget *ui;
QJsonDocument m_doc;
};
#endif
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle(QString("Qt使用内置库读写Json简单示例 - V%1").arg(APP_VERSION));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_but_create_clicked()
{
QJsonArray array = {1, 2, 3, 4, "123"};
array.append(QJsonValue(true));
array.append(QJsonValue(1.23));
array.append(QJsonValue(123));
array.append(QJsonValue("abc"));
QJsonArray array1 = {111, 222, 333};
array.append(QJsonValue(array1));
QJsonObject obj1
{
{"键值1", 1},
{"键值2", 2}
};
array.append(QJsonValue(obj1));
QJsonObject obj2;
obj2.insert("键值0", array);
m_doc.setObject(obj2);
QString strJaon(m_doc.toJson(QJsonDocument::Indented).constData());
ui->textEdit->append("<------------- 生成json ------------->");
ui->textEdit->append(strJaon);
}
void Widget::on_but_save_clicked()
{
if(m_doc.isEmpty()) return;
QString strName &#61; QString("./%1.json").arg(QTime::currentTime().toString("HH-mm-ss"));
QString path &#61; QFileDialog::getSaveFileName(this, "json数据保存到", strName, "Json文件 (*.json)");
if(path.isEmpty()) return;
QFile file(path);
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
file.write(m_doc.toJson(QJsonDocument::Indented));
m_doc &#61; QJsonDocument();
file.close();
}
else
{
qWarning() << "保存失败&#xff01;";
}
}
void Widget::on_but_parse_clicked()
{
QString path &#61; QFileDialog::getOpenFileName(this, "打开json文件", "./", "Json文件 (*.json)");
if(path.isEmpty()) return;
QFile file(path);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qWarning() << "打开文件失败&#xff01;";
return;
}
QByteArray arr &#61; file.readAll();
file.close();
if(arr.isEmpty()) return;
QJsonParseError err;
QJsonDocument doc &#61; QJsonDocument::fromJson(arr, &err);
if(doc.isEmpty())
{
qWarning() << err.errorString();
}
ui->textEdit->append("<------------- 解析json ------------->");
if(doc.isArray())
{
jsonParse(QJsonValue(doc.array()));
}
else if(doc.isObject())
{
jsonParse(QJsonValue(doc.object()));
}
else
{
}
}
void Widget::jsonParse(const QJsonValue &value)
{
switch (value.type())
{
case QJsonValue::Null:
{
break;
}
case QJsonValue::Bool:
{
ui->textEdit->append(QString("bool类型数据&#xff1a;%1").arg(value.toBool()));
break;
}
case QJsonValue::Double:
{
ui->textEdit->append(QString("double类型数据&#xff1a;%1").arg(value.toDouble()));
break;
}
case QJsonValue::String:
{
ui->textEdit->append(QString("字符串类型数据&#xff1a;%1").arg(value.toString()));
break;
}
case QJsonValue::Array:
{
ui->textEdit->append("数组&#xff1a;------------- start");
QJsonArray arr &#61; value.toArray();
for(auto v : arr)
{
jsonParse(v);
}
ui->textEdit->append("数组&#xff1a;------------- end");
break;
}
case QJsonValue::Object:
{
ui->textEdit->append("对象&#xff1a;------------- start");
QJsonObject obj &#61; value.toObject();
QStringList keys &#61; obj.keys();
for(auto key : keys)
{
ui->textEdit->append(QString("键值&#xff1a;%1").arg(key));
jsonParse(obj[key]);
}
ui->textEdit->append("对象&#xff1a;------------- end");
break;
}
case QJsonValue::Undefined:
{
break;
}
}
}
5、源代码&#x1f346;
/_/\ (\ __ /) A__A
( ˶•o•˶) ( •ω• ) ( •⤙• )
ଘ(ა&#x1f371;) (ა&#x1f359;૮)&#xff61; (&#x1f35c;٩ )੭