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"
    }
}
相关推荐
一线大码3 分钟前
SpringBoot 3 和 4 的版本新特性和升级要点
java·spring boot·后端
weixin_4407305017 分钟前
java数组整理笔记
java·开发语言·笔记
weixin_4250230020 分钟前
Spring Boot 实用核心技巧汇总:日期格式化、线程管控、MCP服务、AOP进阶等
java·spring boot·后端
一线大码26 分钟前
Java 8-25 各个版本新特性总结
java·后端
2501_906150561 小时前
私有部署问卷系统操作实战记录-DWSurvey
java·运维·服务器·spring·开源
better_liang1 小时前
每日Java面试场景题知识点之-TCP/IP协议栈与Socket编程
java·tcp/ip·计算机网络·网络编程·socket·面试题
niucloud-admin1 小时前
java服务端——controller控制器
java·开发语言
To Be Clean Coder1 小时前
【Spring源码】通过 Bean 工厂获取 Bean 的过程
java·后端·spring
Fortunate Chen1 小时前
类与对象(下)
java·javascript·jvm
程序员水自流1 小时前
【AI大模型第9集】Function Calling,让AI大模型连接外部世界
java·人工智能·llm