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"
    }
}
相关推荐
艾伦~耶格尔12 分钟前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
一只叫煤球的猫34 分钟前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试
最初的↘那颗心36 分钟前
Flink Stream API 源码走读 - print()
java·大数据·hadoop·flink·实时计算
JH30732 小时前
Maven的三种项目打包方式——pom,jar,war的区别
java·maven·jar
带刺的坐椅2 小时前
轻量级流程编排框架,Solon Flow v3.5.0 发布
java·solon·workflow·flow·solon-flow
David爱编程3 小时前
线程调度策略详解:时间片轮转 vs 优先级机制,面试常考!
java·后端
阿冲Runner3 小时前
创建一个生产可用的线程池
java·后端
写bug写bug4 小时前
你真的会用枚举吗
java·后端·设计模式
喵手4 小时前
如何利用Java的Stream API提高代码的简洁度和效率?
java·后端·java ee
-Xie-4 小时前
Maven(二)
java·开发语言·maven