QT中对于json文件的运用(读取并修改其中部分)

对于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"
                ]
            }
        }
    }
}
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐井丶说天阔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值