QT JSON文件读取为Map,Map转换为JSON格式并保存在JSO文件中

前提

针对于里外都是对象的JSON格式

{
"test": {
    "test":"1",
    "test":"1"
    }
}

一、JSON文件读取为Map

从JSON文件中读取数据


void Coredata::ReadJsonFile(QMap<QString,QString> &g_setting,QMap<QString,QMap<QString,QString>> &g_config){
    QFile *jsonfile=new QFile("./config.json");//可执行文件路径
    QByteArray arr;
    arr.clear();
    if(jsonfile->open(QIODevice::ReadOnly)){
        qDebug()<<"文件打开成功";
        arr=jsonfile->readAll();//读取数据到arr中
        jsonfile->close();
        if(arr.size()>0){
            JsonConversionMap(arr,g_config);//JSON转换到MAP中
        }
        else{
            qDebug()<<"文件读取失败";
            errorlog->FileLog("config.json文件读取失败");
        }
    }
    else{
        qDebug()<<"文件打开失败";
        errorlog->FileLog("config.json文件打开失败");
    }
    //释放空间
    delete jsonfile;
    jsonfile = nullptr;
}

​

转换函数

void Coredata::JsonConversionMap(QByteArray arry,QMap<QString,QMap<QString,QString>> &map){
    qDebug()<<"JsonConversionMap";
    QJsonParseError err;
    //获取根目录
    QJsonDocument doc=QJsonDocument::fromJson(arry,&err);
    qDebug()<<"doc"<<doc;
    if(err.error==QJsonParseError::NoError){
        //转换为对象
        QJsonObject obj=doc.object();
        map.clear();
        //QJsonObject 中键值对的无序性,传进来的顺序和输出的顺序不同
        QStringList a_list=obj.keys();//存最外层的QString
         qDebug()<<"a_list"<<a_list;
        foreach(auto a,a_list){//通过键值遍历最外层QMap<QString,QString>
            QStringList b_list=obj[a].toObject().keys();//存QMap<QString,QString>的QString
            QMap<QString,QString> b_map;
            foreach(auto b,b_list){//通过键值遍历最里层QString
                //获取到QMap<QString,QString>
                b_map.insert(b,obj[a].toObject()[b].toString());//获取到
            }
            //获取到QMap<QString,QMap<QString,QString>>
            map.insert(a,b_map);
            qDebug()<<"map"<<map;
        }
    }
    else{
        qDebug()<<"err.errorString()"<<err.errorString();
        errorlog->FileLog(err.errorString());
    }
}

二、Map转换为JSON格式并保存在JSO文件中

Map转换为JSON

//map转换json,层层解套
QByteArray Coredata::MapConversionJson(QMap<QString,QMap<QString,QString>> &map){
    QMap<QString,QMap<QString,QString>>::iterator it;//通过迭代器
    QJsonObject obj;
//通过迭代器获取QMap<QString,QMap<QString,QString>>的第一层QMap<key,value>
    for(it=map.begin();it!=map.end();++it){
        QMap<QString,QString>::iterator it_1;
        QJsonObject obj_1;
//通过迭代器获取QMap<QString,QMap<QString,QString>>的第二层QMap<key,QMap<key,value>>
        for(it_1=it.value().begin();it_1!=it.value().end();++it){
            obj_1.insert(it_1.key(),it_1.value());//第二层转换为JSON对象
        }
        obj.insert(it.key(),obj_1);//嵌套第一层转换为JSON对象
    }
    QJsonDocument doc(obj);//转换为JsonDocument
    return doc.toJson();
}

保存在JSO文件

//更新json文件数据
void Coredata::UpdateConfigJsonFile(QMap<QString,QMap<QString,QString>> &map){
    QByteArray arr=MapConversionJson(map);//调用上述转换函数存到ByteArray中
    QFile *JsonFile=new QFile("./config.json");
    if(JsonFile->open(QIODevice::WriteOnly|QIODevice::Text)){
        qDebug()<<"文件打开成功";
        JsonFile->resize(0);
        JsonFile->write(arr.data());//写入文件中
        JsonFile->close();
    }
    else{
        qDebug()<<"文件打开失败";
        errorlog->FileLog("UpdateConfigJsonFile文件打开失败");
    }
    delete JsonFile;
    JsonFile=nullptr;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值