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; } } } }