Qt关于json相关操作与检验完整性

1.基本写入

#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QJsonValue>
#include <QString>
#include <QDebug>
#include <QFile>
#include <QDateTime>
#include <QDir>

int main(int argc, char *argv[]) {
// 以读写方式打开主目录下的1.json文件,若该文件不存在则会自动创建
    QFile file(QDir::homePath() + "/1.json");
    if(!file.open(QIODevice::ReadWrite)) {
        qDebug() << "File open error";
    } else {
        qDebug() <<"File open!";
    }
// 使用QJsonObject对象插入键值对。
    QJsonObject jsonObject;
    jsonObject.insert("name", "tom");
    jsonObject.insert("age", "18");
    jsonObject.insert("time", QDateTime::currentDateTime().toString());

// 使用QJsonDocument设置该json对象
    QJsonDocument jsonDoc;
    jsonDoc.setObject(jsonObject);

// 将json以文本形式写入文件并关闭文件。
    file.write(jsonDoc.toJson());
    file.close();

    qDebug() << "Write to file";
    return 0;
}

2.套娃操作

#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonParseError>
#include <QJsonValue>
#include <QString>
#include <QDebug>
#include <QFile>
#include <QDateTime>
#include <QDir>

int main(int argc, char *argv[]) {
// 以读写方式打开主目录下的1.json文件,若该文件不存在则会自动创建
    QFile file(QDir::homePath() + "/1.json");
    if(!file.open(QIODevice::ReadWrite)) {
        qDebug() << "File open error";
    } else {
        qDebug() <<"File open!";
    }
// basicGroup插入键值对,设为基础组
    QJsonObject basicGroup;
    basicGroup.insert("name", "tom");
    basicGroup.insert("age", "18");
    basicGroup.insert("time", QDateTime::currentDateTime().toString());
    
//otherGroup插入键值对,设为其他组
    QJsonObject otherGroup;
    otherGroup.insert("sex", "female");
    otherGroup.insert("jobs", "student");
//使用QJsonObject对象插入键值对,开始套娃
    QJsonObject jsonObject;
    otherGroup.insert("basicGroup", basicGroup);
    otherGroup.insert("otherGroup", otherGroup);
// 使用QJsonDocument设置该json对象
    QJsonDocument jsonDoc;
    jsonDoc.setObject(jsonObject);

// 将json以文本形式写入文件并关闭文件。
    file.write(jsonDoc.toJson());
    file.close();

    qDebug() << "Write to file";
    return 0;
}

3.检验Json是否完整性,(理论上只能坚持json的完整性,无法检验内容是否一致或者缺失)

bool Config::checkConfig(){
QFile configJson(Config::configFileName);
if(configJson.open(QIODevice::ReadOnly)){
    QByteArray configJsonData = configJson.readAll();
    QJsonParseError jsonError;
    QJsonDocument jsonDoc = QJsonDocument::fromJson(configJsonData,&jsonError);
    if(jsonError.error != QJsonParseError::NoError){
        qDebug()<<"error: Config json is incomplete,creat new config json with initial vlues";
        newConfig();
    }
}else{
    qDebug()<<"error: open config json failed,creat new config json with initial vlues";
    newConfig();
    }
}
tag(s): none
show comments · back · home
Edit with Markdown