对于json文件的理解,很多回答都有,不多赘述,这里主要演示在QT中多层级json文件的简单运用。以下是我的json文件内容:
{
"FirstFloor1": {
"SecondFloor1": [
{
"x": "90"
},
{
"y": "55"
}
],
"SecondFloor2": {
"ThirdFloor1": {
"x": "79",
"y": "25"
},
"ThirdFloor2": {
"x": "84",
"y": ["33","34"]
}
}
}
}
分别修改多层对象里的数组和数组里的对象:
//需要的头文件
#include <QFile>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonArray>
#include <QFileInfo>
//读取json文件
QString strPath = "D:/Demo/JsonProject_1-12/data/qtjson.json";
QFile file(strPath);
file.open(QIODevice::ReadWrite);
QByteArray data = file.readAll();
QJsonParseError json_error;
QJsonDocument doucment = QJsonDocument::fromJson(data,&json_error);
//一层一层解嵌套
if(json_error.error == QJsonParseError::NoError)
{
QJsonObject obj3 = doucment.object();
if(doucment.object().value("FirstFloor1").isObject())
{
QJsonObject obj2 = doucment.object().value("FirstFloor1").toObject();
if(obj2.value("SecondFloor1").isArray())
{
QJsonArray array = obj2.value("SecondFloor1").toArray();
if(array.at(0).isObject())
{
//找到需要改动的数组中的对象 移除原先的后插入
QJsonObject obj = array.at(0).toObject();
obj.insert("x","999");
array.removeAt(0);
array.insert(0,obj);
}
obj2.insert("SecondFloor1",array);
}
if(obj2.value("SecondFloor2").isObject())
{
QJsonObject obj1 = obj2.value("SecondFloor2").toObject();
if(obj1.value("ThirdFloor1").isObject())
{
QJsonObject obj0 = obj1.value("ThirdFloor1").toObject();
obj0.insert("x","999");
obj1.insert("ThirdFloor1",obj0);
}if(obj1.value("ThirdFloor2").isObject())
{
QJsonObject obj0 = obj1.value("ThirdFloor2").toObject();
if(obj0.value("y").isArray())
{
//找到对象中的数组 修改
QJsonArray y = obj0.value("y").toArray();
y.insert(0,"999");
y.removeAt(1);
obj0.insert("y",y);
}
obj1.insert("ThirdFloor2",obj0);
}
obj2.insert("SecondFloor2",obj1);
}
obj3.insert("FirstFloor1",obj2);
}
file.close();
//没法直接改动json文件,所以把之前的json文件删除 保存修改后的
QFileInfo FileInfo(strPath);
if (FileInfo.isFile())
{
QFile::remove(strPath);
}
QFile file1(strPath);
file1.open(QIODevice::ReadWrite);
QJsonDocument jdoc(obj3);
file1.write(jdoc.toJson());
}else{
qDebug()<<"output json error";
}
这是保存后的json文件:可以看到改动的三处
{
"FirstFloor1": {
"SecondFloor1": [
{
"x": "999"
},
{
"y": "55"
}
],
"SecondFloor2": {
"ThirdFloor1": {
"x": "999",
"y": "25"
},
"ThirdFloor2": {
"x": "84",
"y": [
"999",
"34"
]
}
}
}
}