Qt读写JSON文件

包含头文件:
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
具体步骤:

一、读出字符串

QFile json_file(filepath);
json_file.open(QIODevice::ReadOnly | QIODevice::Text);
if(json_file.open(QIODevice::ReadOnly | QIODevice::Text))
{
    QMessageBox::about(NULL,"提示","配置文件未打开!");
    return;
}
QString value = json_file.readAll();
QJsonParseError error;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(),&error);
json_file.close();

二、获取document

QJsonParseError error;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(),&error);
if(!(error.error == QJsonParseError::NoError))
{
    QMessageBox::about(NULL,"提示","配置文件错误!");
    return;
}

三、读出节点
根节点:

QJsonObject jsonObject = document.object();

普通节点:

node_name = key["name"].toString();

四、读取表格节点

if (jsonObject.contains(QStringLiteral("node"))) {
    QJsonValue arrayValue = jsonObject.value(QStringLiteral("node"));
    if (arrayValue.isArray()) {
        QJsonArray array = arrayValue.toArray();
        _dev_node_vec.clear();
        for (int i = 0; i < array.size(); i++) {
            QJsonValue paramArray = array.at(i);
            QJsonObject key = paramArray.toObject();
            //从JSON中读出叶子节点并添加到节点列表的vector中
            NodeInfo node;
            node.node_name = key["name"].toString();
            node.device_ip = key["deviceip"].toString();
            node.type = (NodeType)key["nodetype"].toInt();
            node.camera_ip = key["cameraip"].toString();
            node.voice_type = (VoiceType)key["voicetype"].toInt();
            node.voice_ip = key["voiceip"].toString();
            _dev_node_vec.push_back(new MonitorNode(node));
        }
        load_device_panel();
    }

五、插入节点并添加到最后

QJsonObject node_obj;
node_obj.insert("name",info.node_name);
node_obj.insert("deviceip",info.device_ip);
node_obj.insert("cameraip",info.camera_ip);
node_obj.insert("nodetype",info.type);
node_obj.insert("voicetype",info.voice_type);
node_obj.insert("voiceip",info.voice_ip);
array.append(node_obj);

六、修改节点

jsonObj["node"]=array;

七、将修改后的节点保存到DOM中

document.setObject(jsonObject); //设置新节点为根节点

八、写入到文件中

json_file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
//写入到文件中
QTextStream in(&json_file);
in.setCodec("UTF-8");
in << document.toJson();
json_file.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值