qt 读写json格式的文件应用举例 工具函数

1.概要

要做一个json的读取功能,先做一个原型,然后在实际的工程中套用

2.代码

2.1 main.cpp

复制代码
#include "widget.h"
#include "inijsonparams.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    IniJsonParams iniJsonParams;
    //iniJsonParams.save();
    iniJsonParams.load();
    //QApplication a(argc, argv);
    //Widget w;
    //w.show();
    //return a.exec();
    qDebug() << "Hello, World!";
    return 0;
}

2.2 datamod.h

复制代码
#ifndef DATAMOD_H
#define DATAMOD_H
#include <QString>
#include <QList>

class DataMod
{
public:
    DataMod();
    QString name;
    int age;
    QString email;
    QList<QString> hobbies;
    void myView();
};

#endif // DATAMOD_H

2.3 datamod.cpp

复制代码
#include "datamod.h"
#include <QDebug>

DataMod::DataMod() {}

void DataMod::myView(){
    qDebug() << "Hello, World!";
    qDebug() << "name:"<<this->name;
    qDebug() << "age:"<<this->age;
    qDebug() << "email:"<<this->email;
    for(int i=0;i<this->hobbies.count();i++){

        qDebug() << "hobbies"<<i<<":"<<this->hobbies[i];
    }
}

2.4 inijsonparams.h

复制代码
#ifndef INIJSONPARAMS_H
#define INIJSONPARAMS_H

class IniJsonParams
{
public:
    IniJsonParams();
//private:
    void load();
    void save();
};

#endif // INIJSONPARAMS_H

2.5 inijsonparams.cpp

复制代码
#include "inijsonparams.h"
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QDebug>
#include "datamod.h"

IniJsonParams::IniJsonParams() {}

void IniJsonParams::load(){
    DataMod dm;
    QString fileName="test.txt";
    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        //输出log
        return;
    }

    // 读取文件内容
    QByteArray jsonData = file.readAll();
    QJsonParseError jsonError;
    QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData, &jsonError);

    QJsonObject obj = jsonDoc.object();
    QJsonObject us = obj["user"].toObject();
    dm.name = us["name"].toString();
    dm.age = us["age"].toInt();
    dm.email = us["email"].toString();
    QJsonArray array = us["hobbies"].toArray();
    for(int i=0;i<array.count();i++){
        dm.hobbies.append(array[i].toString());
    }
    dm.myView();

}

void IniJsonParams::save(){
    QString fileName="test.txt";
    // 创建一个 QJsonObject
    QJsonObject jsonObject;
    QJsonObject user;
    user.insert("name","John Doe");
    user.insert("age",30);
    user.insert("email","johndoe@example.com");
    QJsonArray hobbiesArray;
    hobbiesArray.append("hiking");
    hobbiesArray.append("reading");
    user.insert("hobbies", hobbiesArray);

    jsonObject.insert("user",user);


    //jsonObject["user"].toObject().insert("hobbies", hobbiesArray);

    // 将 QJsonObject 转换为 QJsonDocument
    QJsonDocument jsonDoc(jsonObject);

    // 写入文件
    QFile file(fileName);
    if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
        file.write(jsonDoc.toJson(QJsonDocument::Indented)); // 缩进格式化输出
        file.close();
    }
}

3.运行结果

3.1 读的结果

Hello, World!

name: "John Doe"

age: 30

email: "johndoe@example.com"

hobbies 0 : "hiking"

hobbies 1 : "reading"

Hello, World!

3.2 写的结果(test.txt)

复制代码
{
    "user": {
        "age": 30,
        "email": "johndoe@example.com",
        "hobbies": [
            "hiking",
            "reading"
        ],
        "name": "John Doe"
    }
}
相关推荐
kangkang-1 小时前
PC端基于SpringBoot架构控制无人机(三):系统架构设计
java·架构·无人机
界面开发小八哥3 小时前
「Java EE开发指南」如何用MyEclipse创建一个WEB项目?(三)
java·ide·java-ee·myeclipse
idolyXyz3 小时前
[java: Cleaner]-一文述之
java
一碗谦谦粉3 小时前
Maven 依赖调解的两大原则
java·maven
netyeaxi4 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
收破烂的小熊猫~4 小时前
《Java修仙传:从凡胎到码帝》第四章:设计模式破万法
java·开发语言·设计模式
猴哥源码4 小时前
基于Java+SpringBoot的动物领养平台
java·spring boot
老任与码4 小时前
Spring AI Alibaba(1)——基本使用
java·人工智能·后端·springaialibaba
小兵张健4 小时前
武汉拿下 23k offer 经历
java·面试·ai编程
FreeBuf_4 小时前
Apache组件遭大规模攻击:Tomcat与Camel高危RCE漏洞引发数千次利用尝试
java·tomcat·apache