包含头文件:
#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();