QT JSON操作
头文件.h
#pragma once #include <QtWidgets/QMainWindow> #include "ui_JsonTest.h" class JsonTest : public QMainWindow { Q_OBJECT public: JsonTest(QWidget *parent = Q_NULLPTR); public slots: void createJson(); void readJosn(); private: Ui::JsonTestClass ui; };
源文件.cpp
#include "JsonTest.h" #include <QJsonArray> #include <QJsonObject> #include <QJsonDocument> #include <QJsonParseError> #include <QJsonValue> #include <QDir> #include <QFile> #include <QDebug> #include <QString> #include <QDateTime> #include <iostream> JsonTest::JsonTest(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(createJson())); connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(readJosn())); } void JsonTest::createJson() //写入json的槽函数 { //创建json文件 QFile filejson_1(QApplication::applicationDirPath()+QDir::separator()+"json1"); if (!filejson_1.open(QIODevice::ReadWrite)) { qDebug() << QString::fromLocal8Bit("json1 文件打开失败!"); } else { qDebug() << QString::fromLocal8Bit("json1 文件打开成功!"); } //创建一个json数组 QJsonArray array1; array1.append(QString::number(0.22)); array1.append(QString::number(12.2)); array1.append(QString::number(145.01)); array1.append(QString::number(24.0)); array1.append(QString::number(14.4)); array1.append(QString::number(0.1)); QJsonArray array2; array2.append(QString::number(1.3)); array2.append(QString::number(1.4)); array2.append(QString::number(1.5)); array2.append(QString::number(1.6)); array2.append(QString::number(1.7)); array2.append(QString::number(1.8)); //创建json对象(键值对的集合) QJsonObject jsonobject1; jsonobject1.insert("name","tom"); jsonobject1.insert("array", array1); QJsonObject jsonobject2; jsonobject2.insert("name", "bon"); jsonobject2.insert("array", array2); //将集合放入到jsonarray中 QJsonArray jsonarray1; jsonarray1.append(jsonobject1); jsonarray1.append(jsonobject2); //创建Document对象(读写json文档) QJsonDocument jsondocument1; jsondocument1.setArray(jsonarray1); //写入到 json文件中 filejson_1.write(jsondocument1.toJson()); //关闭文件 filejson_1.close(); } void JsonTest::readJosn() //读取josn的槽函数 { //保存从json文件里面,读取到的数据 QJsonArray tempJsonArray; //打开json文件 qDebug() << QString::fromLocal8Bit("读取json文件"); QFile readJsonFile(QApplication::applicationDirPath() + QDir::separator() + "json1"); if (!readJsonFile.open(QIODevice::ReadWrite)) //!true { qDebug() <<QString::fromLocal8Bit("读取json文件——打开文件失败!") ; qDebug() << !readJsonFile.open(QIODevice::ReadWrite); } else { qDebug() << QString::fromLocal8Bit("读取json文件——打开文件成功!"); qDebug() << !readJsonFile.open(QIODevice::ReadWrite); } //创建QjsonParseError 对象,对josn文件进行解析 QJsonParseError jsonparsererror; //创建QjsonDocument 对象,进行读json文件内容 //将json文件里面的数据,存储到QJsonDocument QJsonDocument jsonDocument = QJsonDocument::fromJson(readJsonFile.readAll(), &jsonparsererror); //进行解析json,如果没问题开始处理解析后的数据 if (!jsonDocument.isNull() && jsonparsererror.error == QJsonParseError::NoError) { std::cout << "文件解析成功!"<<endl; qDebug() << (jsonDocument.isNull() && jsonparsererror.error == QJsonParseError::NoError); //将存储json数据的QJsonDocument转换成数据保存到 QJsonArray对象中 QJsonArray jarray = jsonDocument.array(); qDebug() << jarray; for (int i = 0; i < jarray.count(); i++) { //从jsonarray数据中获取json对象(键值对) auto _jsonobject = jarray[i].toObject(); //将键名 找到值,赋值给_name QString _name = _jsonobject.value("name").toString(); qDebug() << _name; if (_name == "bon") { //拿到键所对应的值(值是数组) tempJsonArray = _jsonobject.value("array").toArray(); } } //通过数组的索引值,取到对应的数据 auto a = tempJsonArray.at(0).toString(); //打印取到的值 qDebug() << a.toDouble(); } else { std::cout << "文件解析失败!" << endl; } readJsonFile.close(); }
效果
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程