Qt构建与解析Json示例
本文以BeJson(https://www.bejson.com/)中的JSON在线编辑器示例内容作为学习Qt中构建、解析Json的参考方法。
1、Json文本
{ "name": "BeJson", "url": "http://www.bejson.com", "page": 88, "isNonProfit": true, "address": { "city": "江苏苏州", "country": "中国", "street": "科技园路" }, "links": [ { "name": "Google", "url": "http://www.google.com" }, { "name": "Baidu", "url": "http://www.baidu.com" }, { "name": "SoSo", "url": "http://www.SoSo.com" } ] }
2、构建、解析代码
#include <QtCore/QCoreApplication> #include <QDir> #include <QFile> #include <QJsonArray> #include <QJsonDocument> #include <QJsonObject> #include <QJsonValue> void writeJson() { QJsonObject rootObject; //1.插入name、url、page、isNonProfit字段 rootObject.insert("name", "BeJson"); rootObject.insert("url", "http://www.bejson.com"); rootObject.insert("page", 88); rootObject.insert("isNonProfit", true); //2.插入address字段 QJsonObject addressObject; addressObject.insert("street", "科技园路"); addressObject.insert("city", "江苏苏州"); addressObject.insert("country", "中国"); rootObject.insert("address", addressObject); //3.插入links字段 QJsonArray linkArray; //Google QJsonObject linkGoogleObject; linkGoogleObject.insert("name", "Google"); linkGoogleObject.insert("url", "http://www.google.com"); //Baidu QJsonObject linkBaiduObject; linkBaiduObject.insert("name", "Baidu"); linkBaiduObject.insert("url", "http://www.baidu.com"); //SoSo QJsonObject linkSoSoObject; linkSoSoObject.insert("name", "SoSo"); linkSoSoObject.insert("url", "http://www.SoSo.com"); linkArray.append(linkGoogleObject); linkArray.append(linkBaiduObject); linkArray.append(linkSoSoObject); rootObject.insert("links", linkArray); //4.将rootObject转换为字符串 QJsonDocument doc(rootObject); QByteArray json = doc.toJson(); //打印输出 qDebug() << QString(json).toUtf8().data(); //5.将json字符串写入文件 QString dirPath = QCoreApplication::applicationDirPath(); QString path = QDir::cleanPath(dirPath + QDir::separator() + "bejson.json"); QFile file(path); file.open(QFile::WriteOnly); file.write(json); file.close(); } void readJson() { //1.从文件读取json字符串 QString dirPath = QCoreApplication::applicationDirPath(); QString path = QDir::cleanPath(dirPath + QDir::separator() + "bejson.json"); QFile file(path); file.open(QFile::ReadOnly); QByteArray json = file.readAll(); file.close(); //2.解析json字符串 QJsonDocument doc = QJsonDocument::fromJson(json); if (!doc.isObject()) { qDebug() << "Not an object"; return; } QJsonObject rootObject = doc.object(); QStringList keys = rootObject.keys(); for (int i=0; i<keys.size(); i++) { QString key = keys[i]; QJsonValue value = rootObject.value(key); if (value.isBool()) { qDebug() << key << ":" << value.toBool(); } else if (value.isString()) { qDebug() << key << ":" << value.toString(); } else if (value.isDouble()) { qDebug() << key << ":" << value.toDouble(); } else if (value.isObject()) { qDebug() << key << ":"; QJsonObject addressObject = value.toObject(); QString street = addressObject["street"].toString(); QString city = addressObject["city"].toString(); QString country = addressObject["country"].toString(); qDebug() << " street: " << street; qDebug() << " city: " << city; qDebug() << " country: " << country; } else if (value.isArray()) { qDebug() << key << ":"; QJsonArray linksArray = value.toArray(); for (int i=0; i<linksArray.size(); i++) { QJsonObject provinceObject = linksArray[i].toObject(); QString name = provinceObject["name"].toString(); QString url = provinceObject["url"].toString(); qDebug() << " name: " << name << ", url: " << url; } } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库