qt 开发笔记 json 自动转换实验

1.改用

读取json的配置文件能否想java和c#直接完成json字符串到对象的赋值呢,答案是不能?

能否用宏实现呢

比如:#define funMacro(json的键(变量名)) 变量名= jsonObject[#键].toInt();

这个看上去是个理想的选择,如果成功了,就能完成值和建的自动匹配了

但实际上失败了,因为宏的特点是变量可以变成字符串,而字符串的值却无法变成变量。

QString key = keys.at(i);
funMacro(a);

期待这个宏的结果是,如果变量和key的名称都是a

那么宏的结果是 key =  jsonObject["key "].toInt()

这显然不是我们想要的结果,可以直接用变量a

那么宏的结果是 a =  jsonObject["key "].toInt()

这结果对了,可是就无法实现自动的赋值了。

2.代码

2.1 main

 


#include "testmacro.h"

int main(int argc, char *argv[])
{
    TestMacro tm;
    qDebug() << "Hello, World!";
    return 0;
}

2.2 testmacro.h

 

#ifndef TESTMACRO_H
#define TESTMACRO_H

class TestMacro
{
public:
    TestMacro();
};

#endif // TESTMACRO_H

2.3 testmacromod.h

#ifndef TESTMACROMOD_H
#define TESTMACROMOD_H

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

class TestMacroMod
{
public:
    TestMacroMod();
    int a;
    void setJson(QJsonObject jsonObject);
};

#endif // TESTMACROMOD_H

 

2.4 testmacro.cpp

 

#include "testmacro.h"
#include "testmacromod.h"

TestMacro::TestMacro() {
    TestMacroMod tm;
    QJsonObject obj;
    obj.insert("a",7);
    tm.setJson(obj);
}

2.5 testmacromod.cpp

 

#include "testmacromod.h"
#include <QDebug>
#define funMacro(ms) ms = jsonObject[#ms].toInt();

TestMacroMod::TestMacroMod() {}

void TestMacroMod::setJson(QJsonObject jsonObject){
    a = jsonObject["a"].toInt();
    QStringList keys = jsonObject.keys();
    for(int i=0; i<keys.size(); ++i)
    {
        QString key = keys.at(i);
        funMacro(a);
    }
    qDebug() <<"a:"<< a;
}

3.运行结果

a: 7
Hello, World! 

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用 `QJsonDocument` 类来生成 JSON 数据,然后将其写入到文件中。以下是一个示例代码: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QFile> void saveJsonToFile(const QString& filePath, const QJsonObject& json) { // 生成 JSON 文档 QJsonDocument jsonDoc(json); QByteArray jsonData = jsonDoc.toJson(); // 将 JSON 数据写入文件 QFile file(filePath); if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { file.write(jsonData); file.close(); } } ``` 在这个函数中,我们将一个 `QJsonObject` 对象转换JSON 数据,并将其写入到指定的文件中。你可以在需要保存 JSON 数据的地方调用这个函数,例如在用户关闭程序时自动保存 JSON 数据。 ### 回答2: 在Qt中,可以使用QJsonDocument类和QJsonArray类来处理JSON数据,并通过QFile类来保存JSON文件。 1. 首先,我们需要创建一个QJsonObject对象,并添加需要保存的JSON数据。 ```cpp QJsonObject jsonObject; jsonObject["name"] = "John"; jsonObject["age"] = 25; jsonObject["city"] = "Beijing"; ``` 2. 然后,我们将QJsonObject对象转换为QJsonDocument对象。 ```cpp QJsonDocument jsonDoc(jsonObject); ``` 3. 接下来,我们可以通过QFile类来保存JSON文件。首先,创建一个QFile对象,并打开或创建JSON文件。 ```cpp QFile file("data.json"); if(file.open(QIODevice::WriteOnly)){ // 文件打开成功 }else{ // 文件打开失败 } ``` 4. 然后,使用QJsonDocument的toJson()函数将QJsonDocument对象转化为字符串,并通过QTextStream类将字符串写入文件。 ```cpp QTextStream stream(&file); stream << jsonDoc.toJson(); ``` 5. 最后,关闭文件。 ```cpp file.close(); ``` 完成上述步骤后,你就可以在应用程序运行时自动保存JSON文件了。每次需要保存时,只需按照上面的步骤重新执行即可。 ### 回答3: 在Qt中,可以使用QJsonDocument类和QFile类来实现自动保存JSON文件的功能。 首先,需要引入相关的头文件: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QFile> ``` 接下来,可以创建一个函数来保存JSON文件,例如: ```cpp void saveJsonFile(const QJsonObject& jsonObject, const QString& filePath) { // 创建JSON文档 QJsonDocument jsonDoc(jsonObject); // 打开文件 QFile file(filePath); if (!file.open(QIODevice::WriteOnly)) { // 文件打开失败,进行错误处理 qDebug() << "无法打开文件进行保存"; return; } // 将JSON文档写入文件 file.write(jsonDoc.toJson()); // 关闭文件 file.close(); qDebug() << "文件保存成功"; } ``` 在保存JSON文件前,需要先构建一个QJsonObject对象,用于存储JSON数据。 然后,可在其他地方调用saveJsonFile函数,将需要保存的JSON数据和保存路径传递进去,例如: ```cpp // 创建一个QJsonObject对象 QJsonObject jsonObject; // 添加需要保存的数据 jsonObject["name"] = "张三"; jsonObject["age"] = 25; jsonObject["gender"] = "男"; // 调用保存函数 saveJsonFile(jsonObject, "data.json"); ``` 这样,就可以实现自动保存JSON文件的功能了。每次在需要保存数据时,调用saveJsonFile函数即可将数据保存到指定的JSON文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值