QT读取外部json文件并解析

json文件内容如下:
在这里插入图片描述
提取json中内容并存储在相应的变量中:
configPath为json文件的路径

总体流程为:使用QFile从路径打开json文件,QByteArray读取文件内容,QJsonDocument解析json文件,QJsonObject获取json对象,使用contains(“”)函数进行判断,使用.value(“”).toString()进行获取json文件中的内容。

// 读取配置文件内容,存储里面的内容
void ProgramStartup::readConfigFile() {
    exePaths.clear();  // 清空之前的路径,避免重复添加
    QFile configFile(configPath);
    if (!configFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "无法打开文件:" << configPath;
        return;
    }

    // 读取文件内容
    QByteArray fileContent = configFile.readAll();
    configFile.close();

    // 解析JSON文档
    QJsonDocument jsonDoc = QJsonDocument::fromJson(fileContent);
    if (jsonDoc.isNull()) {
        qDebug() << "解析JSON失败或文件格式不正确:" << configPath;
        return;
    }
    // 获取JSON对象
    QJsonObject jsonObj = jsonDoc.object();

    // 获取PLC配置
    if (jsonObj.contains("plcAddress")) {
        plcAddress = jsonObj.value("plcAddress").toString();
        qDebug() << "读取到PLC地址:" << plcAddress;
    }

    if (jsonObj.contains("plcPort")) {
        QString portStr = jsonObj.value("plcPort").toString();
        plcPort = portStr.toInt();  // 将字符串转换为整数
        qDebug() << "读取到PLC端口:" << plcPort;
    }

    // 获取信号寄存器地址
    if (jsonObj.contains("startSignalRegister")) {
        startSignalRegister = static_cast<quint16>(jsonObj.value("startSignalRegister").toString().toUInt(nullptr, 16));
        qDebug() << "读取到启动信号寄存器地址:" << QString::number(startSignalRegister, 16);
    }

    if (jsonObj.contains("stopSignalRegister")) {
        stopSignalRegister = static_cast<quint16>(jsonObj.value("stopSignalRegister").toString().toUInt(nullptr, 16));
        qDebug() << "读取到停止信号寄存器地址:" << QString::number(stopSignalRegister, 16);
    }


    // 获取以 "exe_path" 开头的键并存储其值
    for (const QString &key : jsonObj.keys()) {
        if (key.startsWith("exe_path")) {
            QString exePath = jsonObj.value(key).toString().trimmed();
            if (!exePath.isEmpty()) {
                exePaths << exePath;  // 存储可执行文件路径
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值