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"
    }
}
相关推荐
جيون داد ناالام ميづ6 分钟前
Spring Boot 核心原理(一):基础认知篇
java·spring boot·后端
郝学胜-神的一滴8 分钟前
Qt删除布局与布局切换技术详解
开发语言·数据库·c++·qt·程序人生·系统架构
StarRocks_labs20 分钟前
StarRocks 4.0:Real-Time Intelligence on Lakehouse
starrocks·人工智能·json·数据湖·存算分离
fantasy5_51 小时前
手撕vector:从零实现一个C++动态数组
java·开发语言·c++
十八旬1 小时前
RuoYi-Vue3项目定制修改全攻略
java·windows
任风雨1 小时前
3.1.1.Java基础知识
java·开发语言
脸大是真的好~1 小时前
黑马JAVA+AI 加强03-集合-Collection-List和Set集合-迭代器(Iterator)遍历-并发修改异常
java
cj6341181502 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
java·后端
书院门前细致的苹果2 小时前
深入理解 Java 多线程与线程池 —— 从原理到实战
java·开发语言
大G的笔记本3 小时前
用 Redis 的 List 存储库存队列,并通过 LPOP 原子性出队来保证并发安全案例
java·数据库·redis·缓存