QT5中如何将数据转换为JSON格式
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
1.简单JSON数据
(1)首先加上有关JSON的头文件
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
(2)在.h文件中加上全局变量的结构体
struct Today
{
QString date;
};
//顺便给结构体给一个变量
Today today;
(3)在构造函数中初始化
today.date = "20190911";
(4)然后就可以将数据在textedit控件中显示出来
QJsonObject json;//构建json对象json
json.insert("date", today.date);
QJsonDocument document;
document.setObject(json);
QByteArray byte_array = document.toJson(QJsonDocument::Compact);
QString json_str(byte_array);
ui->textEdit->setText(json_str);
(5)运行效果
{"date":"20190911"}
2.较复杂的JSON数据
(1)实现代码
QJsonObject dataobj;//构建json对象dataobj
dataobj.insert("shidu","95%");
dataobj.insert("wendu","8");
QJsonObject json;//构建json对象json
json.insert("data", dataobj);//将dataobj中的数据插入到json对象中
json.insert("date", today.date);
QJsonDocument document;
document.setObject(json);
QByteArray byte_array = document.toJson(QJsonDocument::Compact);
QString json_str(byte_array);
ui->textEdit->setText(json_str);
(2)运行效果
3.复杂JSON数据
(1)代码
.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
struct Today
{
QString date;
QString city;
QString wendu;
QString fx;
QString fl;
};
struct Forecast
{
QString date;
QString wendu1;
QString rain;
QString cloud;
QString type;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void DataToJson();
private:
Ui::MainWindow *ui;
Today today;
Forecast forecast[3];
};
#endif // MAINWINDOW_H
.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 结构体初始化
today.date = "20190911";
today.city = "CH";
today.wendu = "29";
today.fl = "22";
today.fx = "33";
for (int i = 0; i < 3; i++)
{
forecast[i].date = "00日星期0";
forecast[i].wendu1 = "高温 0.0℃";
forecast[i].rain = " 0mm";
forecast[i].cloud = " 0%";
forecast[i].type = "undefined";
}
DataToJson();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::DataToJson()
{
/获取数据//
QList<QString>forlist1;
forlist1<<"11日星期一"<<"12日星期二"<<"13日星期三";
for(int i=0;i<forlist1.size();i++)
{
//qDebug() << forlist1.at(i);
forecast[i].date=forlist1.at(i);//将上面链表中的数据依次赋给forecast中的变量
}
QList<QString>forlist2;
forlist2<<"10%"<<"5%"<<"2%";
for(int i=0;i<forlist2.size();i++)
{
forecast[i].cloud=forlist2.at(i);
}
QList<QString>forlist3;
forlist3<<"2mm"<<"3mm"<<"4mm";
for(int i=0;i<forlist3.size();i++)
{
forecast[i].rain=forlist3.at(i);
}
/
QJsonObject yesjson;//构建json对象yesjson
yesjson.insert("rain",forecast[0].rain);
yesjson.insert("date",forecast[0].date);
yesjson.insert("cloud",forecast[0].cloud);
/插入数据///
//构建Json对象
QJsonObject subjson[3];
for (int i = 1; i < 3; ++i)//插入后面两天的数据
{
subjson[i].insert("date", forecast[i].date);
subjson[i].insert("rain", forecast[i].rain);
subjson[i].insert("cloud", forecast[i].cloud);
}
//构建Json数组
QJsonArray jsonArray;
for (int i = 1; i < 3; ++i)
{
jsonArray.append(QJsonValue(subjson[i]));
}
/
QJsonObject dataobj;//构建json对象dataobj
dataobj.insert("shidu","95%");
dataobj.insert("wendu","8");
dataobj.insert("yesterday",yesjson);
dataobj.insert("forecast",QJsonValue(jsonArray));
QJsonObject json;//构建json对象json
json.insert("data", dataobj);//将dataobj中的数据插入到json对象中
json.insert("date", today.date);
QJsonDocument document;
document.setObject(json);
QByteArray byte_array = document.toJson(QJsonDocument::Compact);
QString json_str(byte_array);
ui->textEdit->setText(json_str);
}
(2)运行效果
参考文档:
https://blog.csdn.net/wzz953200463/article/details/100135212
https://blog.csdn.net/u011720560/article/details/77603171
http://www.mycode.net.cn/language/cpp/576.html
https://blog.csdn.net/qq_30725967/article/details/98205514
GitHub 加速计划 / js / json
18
5
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:3 个月前 )
2d42229f
* Support BSON uint64 de/serialization
Signed-off-by: Michael Valladolid <mikevalladolid@gmail.com>
* Treat 0x11 as uint64 and not timestamp specific
Signed-off-by: Michael Valladolid <mikevalladolid@gmail.com>
---------
Signed-off-by: Michael Valladolid <mikevalladolid@gmail.com> 4 天前
1809b3d8
Signed-off-by: Niels Lohmann <mail@nlohmann.me> 5 天前
更多推荐
已为社区贡献1条内容
所有评论(0)