简述
Qt5 中包含了处理 JSON 的类,均以 QJson 开头(例如:QJsondocument、QJsonArray、QJsonObject),在 QtCore 模块中,不需要额外引入其它模块。
效果:
代码如下:
#include#include #include #include #include #include #include #include #include #include #include #pragma execution_character_set("utf-8") // 创建json文件 void CreateMyJson() { QFile file(QDir::currentPath() + "/myjson.json"); if(!file.open(QIODevice::ReadWrite)) { qDebug() << "File open error"; } // 清空文件中的原有内容 file.resize(0); // 添加学校信息 QJsonObject schoolObject; schoolObject.insert("School","北京一中"); schoolObject.insert("Part", "西城区"); schoolObject.insert("Class", "三年级"); // 使用QJsonArray添加学生信息 QJsonArray personArray; for(int i = 0; i < 3; i++) { QJsonObject personObject; personObject.insert("Id", QString::number(i+1)); personObject.insert("age", "18"); personObject.insert("ontime", true); personObject.insert("time", QDateTime::currentDateTime().toString()); personArray.append(personObject); } QJsonArray colorAry; colorAry.append(0.8); colorAry.append(1.0); colorAry.append(0.0); // 使用QJsonObject对象插入键值对。 QJsonObject jsonObject; jsonObject.insert("Address", "北京"); jsonObject.insert("Type", "学校"); jsonObject.insert("Data", 1998); jsonObject.insert("Info", QJsonValue(schoolObject)); jsonObject.insert("Color", QJsonValue(colorAry)); jsonObject.insert("Students", QJsonValue(personArray)); QJsondocument jsonDoc; jsonDoc.setObject(jsonObject); file.write(jsonDoc.toJson()); file.close(); } // 解析json文件 void ParseMyJson() { QFile jsonFile(QDir::currentPath() + "/myjson.json"); if(!jsonFile.open(QIODevice::ReadOnly)) { qDebug() << "could't open projects json"; return; } QByteArray byteArray = jsonFile.readAll(); jsonFile.close(); QJsonParseError jsonError; QJsondocument doucment = QJsondocument::fromJson(byteArray, &jsonError); // 转化为 JSON 文档 if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) { // 解析未发生错误 if (doucment.isObject()) { // JSON 文档为对象 QJsonObject object = doucment.object(); // 转化为对象 if (object.contains("Address")) { QJsonValue value = object.value("Address"); if (value.isString()) { QString strAddress = value.toString(); qDebug() << "Address : " << strAddress; } } if (object.contains("Type")) { QJsonValue value = object.value("Type"); if (value.isString()) { QString strType = value.toString(); qDebug() << "Type : " << strType; } } if (object.contains("Data")) { QJsonValue value = object.value("Data"); if (value.isDouble()) { int nData = value.toVariant().toInt(); qDebug() << "data: " << nData; } } if (object.contains("Color")) { QJsonValue value = object.value("Color"); if (value.isArray()) { QJsonArray array = value.toArray(); int nSize = array.size(); for (int i = 0; i < nSize; ++i) { QJsonValue value = array.at(i); if (value.isDouble()) { double dColor = value.toDouble(); qDebug() << "Color" << i << ": " << dColor; } } } } if (object.contains("Info")) { QJsonValue value = object.value("Info"); if (value.isObject()) { QJsonObject obj = value.toObject(); if (obj.contains("Class")) { QJsonValue value = obj.value("Class"); if (value.isString()) { QString strClass = value.toString(); qDebug() << "Info:Class : " << strClass; } } if (obj.contains("School")) { QJsonValue value = obj.value("School"); if (value.isString()) { QString strSchool = value.toString(); qDebug() << "Info:School : " << strSchool; } } } } if (object.contains("Students")) { QJsonValue value = object.value("Students"); if (value.isArray()) { QJsonArray array = value.toArray(); int nSize = array.size(); for (int i = 0; i < nSize; ++i) { QJsonValue childValue = array.at(i); QJsonObject childobj = childValue.toObject(); if (childobj.contains("Id")) { QJsonValue value = childobj.value("Id"); if (value.isString()) { QString strId = value.toString(); qDebug() << "Students:" << i << ": Id : " << strId; } } if (childobj.contains("age")) { QJsonValue value = childobj.value("age"); if (value.isString()) { QString strage = value.toString(); qDebug() << "Students:" << i << ": age : " << strage; } } } } } } } } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); CreateMyJson(); ParseMyJson(); return a.exec(); }



