Qt操作json文件


json 数据

在Qt中常见的数据传输格式为 xml 与 json 这个两种,其中 xml 在1996年提出是一种出现时间相对较久的文件格式,与2002年提出的json相比,他可以标注数据的一些属性,并且可以直接被html识别。相比较来说json就是比较简洁,人的可读性更强。更适合用来传输数据。

json格式:

标准格式:

#JSON字符串
{"name":"jobs"}

#JSON布尔:必须小写的true和false
{"bool":true}

#JSON空:必须小写的null
{"object":null}

示例:

{
    "name" : "mil",
    "age" : 15,

    "language": ["zh", "eng"],

    "course" : [{
            "name" : 'math",
            "score": 66
    },{
            "name" : "eng",
            "score": 99
    }]
}

在Qt中 使用QJsonDocument读写json文件。

类说明
QJsonDocument 读写json文档
QJsonObject 封装Json对象
QJsonArry 封装json数组
QJosnValue 封装json值,int,flot,double,{},[]
QJsonObject
QJsonParseError 所选json处理过程中出现的错误

封装 json

void Widget::pkjson()
{
    QFile jsfile("../test_1.json");


    // ---> 封装/保存 json
    QJsonObject rootObj;
    QJsonObject professionalObj;
    professionalObj.insert("english", 4);

    QJsonArray languageArr;
    languageArr.append("c");
    languageArr.append("c++");

    rootObj.insert("name","milo");
    rootObj.insert("age",80);
    rootObj.insert("professional", professionalObj);
    rootObj.insert("phone","milo");
    rootObj.insert("language", languageArr);
    rootObj.insert("hard","milo");
    rootObj.insert("hot","milo");

    QJsonDocument jdoc(rootObj);

    // ---> 打开文件并向文件中添加内容
    if(jsfile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) {
        QTextStream js(&jsfile);
        js<< jdoc.toJson();
        jsfile.close();
    } else {
        cout << "打开失败";
    }
}


解析 json


void Widget::exjson()
{
    // ---> 解包json
    QFile jsfile("../test_1.json");
    if(jsfile.open(QIODevice::ReadOnly)){
        // ---> 设置解析报错
        QJsonParseError err;
        // ---> 解释json文件
        QJsonDocument jsdoc = QJsonDocument::fromJson(jsfile.readAll(), &err);

        if(err.error!=QJsonParseError::NoError){
            // ---> 如果有报错
            cout << "json 格式错误!";
            return;
        } else {
            // ---> 读取根目录
            QJsonObject rootObj = jsdoc.object();
            // ---> 读取 key = name 的值
            cout << rootObj.value("name").toString();

            QJsonArray lanArr = rootObj.value("language").toArray();
            cout << lanArr.at(0).toString() << lanArr.at(1).toString();

            // ---> 判断key的类型 , 是arry 还是 obj
            if(rootObj.value("professional").type() == QJsonValue::Object){
                cout << "这个key的类型是 obj";
            }
        }
        jsfile.close();
    }
}



免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM