当前位置: 首页 > news >正文

Qt实现json数据的生成、解析、修改和删除

文章介绍

  • 本文章主要介绍如何使用QT提供的json相关类来处理json数据,包括json数据的生成、解析、修改和json数据的删除。

json数据的增删改查

  • 处理json数据时需要包含以下三个头文件
    •   #include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>
      

json数据生成

  • json数据
    •   {  "id":1001,"name":"jack","sex":true}
      
  • 代码
    •   // 创建json数据对象QJsonObject json;json.insert("name", "jack");json.insert("id", 1001);json.insert("sex", true);QJsonDocument document;   // 创建json文档document.setObject(json); // 给json文档设置json数据对象// 将json数据对象转为字符串QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

嵌套json数据生成

  • json数据
    •   {"id": 1002,"name": "Tom","scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 代码
    •   // 创建子节点scoreData的json数据对象QJsonObject scoreObject;scoreObject.insert("Math", 90);scoreObject.insert("Chinese", 96);scoreObject.insert("English", 82);// 创建json数据对象QJsonObject json;json.insert("name", "Tom");json.insert("id", 1002);json.insert("sex", true);json.insert("scoreData", QJsonValue(scoreObject));QJsonDocument document;document.setObject(json);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

包含数组的json数据生成

  • json数据
    •   {"id":1002,"name": "Tom","scoreData":{"Chinese":96,"English":82,"Math":90},"sex": true,"techData":["C++", "JAVA", "PYTHON"]}
      
  • 代码
    •   // 创建json数组对象QJsonArray techArray;techArray.append("C++");techArray.append("JAVA");techArray.append("PYTHON");// 创建子节点scoreData的json数据对象QJsonObject scoreObject;scoreObject.insert("Math", 90);scoreObject.insert("Chinese", 96);scoreObject.insert("English", 82);// 创建json对象QJsonObject json;json.insert("name", "Tom");json.insert("id", 1002);json.insert("sex", true);json.insert("scoreData", QJsonValue(scoreObject));json.insert("techData", QJsonValue(techArray));QJsonDocument document;document.setObject(json);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

包含数组对象的json数据生成

  • json数据
    •   {"id":1002,"name": "Tom","schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 代码
    •   // 创建json数组QJsonArray SchoolArray;QJsonObject primarySchoolObj;primarySchoolObj.insert("schoolName", "xiaoxue");primarySchoolObj.insert("schoolCity", "Xian");QJsonObject middleSchoolObj;middleSchoolObj.insert("schoolName", "zhongxue");middleSchoolObj.insert("schoolCity", "Xian");QJsonObject universityObj;universityObj.insert("schoolName", "daxue");universityObj.insert("schoolCity", "Beijing");// json数组中插入json数据对象SchoolArray.append(primarySchoolObj);SchoolArray.append(middleSchoolObj);SchoolArray.append(universityObj);// 创建子节点scoreData的json数据对象QJsonObject scoreObject;scoreObject.insert("Math", 90);scoreObject.insert("Chinese", 96);scoreObject.insert("English", 82);// 创建json数据QJsonObject json;json.insert("name", "Tom");json.insert("id", 1002);json.insert("sex", true);json.insert("scoreData", QJsonValue(scoreObject));json.insert("schoolData", QJsonValue(SchoolArray));QJsonDocument document;document.setObject(json);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

json数据解析

  • json数据
    •   {"sex":true,"id":1001,"name":"jack"}
      
  • 解析结果
    •   strName "jack"iId 1001bSex true
      
  • 代码
    •   QByteArray jsonData = "{\"sex\":true,\"id\":1001,\"name\":\"jack\"}";// 将字符串转为json文档QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 解析json数据QJsonValue nameValue = rootObj.value("name");QString strName = nameValue.toString();qDebug() << "strName" << strName;QJsonValue idValue = rootObj.value("id");int iId = idValue.toInt();qDebug() << "iId" << iId;QJsonValue sexValue = rootObj.value("sex");bool bSex = sexValue.toBool();qDebug() << "bSex" << bSex;
      

嵌套json数据解析

  • json数据
    •   {"id":1002,"name":"Tom","scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 解析结果
    •   strName "Tom"iId 1002bSex trueiChinese 96iEnglish 82iMath 90
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 解析json数据QJsonValue nameValue = rootObj.value("name");QString strName = nameValue.toString();qDebug() << "strName" << strName;QJsonValue idValue = rootObj.value("id");int iId = idValue.toInt();qDebug() << "iId" << iId;QJsonValue sexValue = rootObj.value("sex");bool bSex = sexValue.toBool();qDebug() << "bSex" << bSex;// 解析scoreData节点的json数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();QJsonValue chineseValue = scoreDataObj.value("Chinese");int iChinese = chineseValue.toInt();qDebug() << "iChinese" << iChinese;QJsonValue englishValue = scoreDataObj.value("English");int iEnglish = englishValue.toInt();qDebug() << "iEnglish" << iEnglish;QJsonValue mathValue = scoreDataObj.value("Math");int iMath = mathValue.toInt();qDebug() << "iMath" << iMath;
      

包含数组的json数据解析

  • json数据
    •   {"id":1002,"name":"Tom","scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true,"techData":["C++", "JAVA", "PYTHON"]}
      
  • 解析结果
    •   strName "Tom"iId 1002bSex trueiChinese 96iEnglish 82iMath 90str "C++"str "JAVA"str "PYTHON"
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true,\"techData\":[\"C++\",\"JAVA\",\"PYTHON\"]}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 解析json数据QJsonValue nameValue = rootObj.value("name");QString strName = nameValue.toString();qDebug() << "strName" << strName;QJsonValue idValue = rootObj.value("id");int iId = idValue.toInt();qDebug() << "iId" << iId;QJsonValue sexValue = rootObj.value("sex");bool bSex = sexValue.toBool();qDebug() << "bSex" << bSex;// 解析scoreData节点的json数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();QJsonValue chineseValue = scoreDataObj.value("Chinese");int iChinese = chineseValue.toInt();qDebug() << "iChinese" << iChinese;QJsonValue englishValue = scoreDataObj.value("English");int iEnglish = englishValue.toInt();qDebug() << "iEnglish" << iEnglish;QJsonValue mathValue = scoreDataObj.value("Math");int iMath = mathValue.toInt();qDebug() << "iMath" << iMath;// 解析techData数组中的json数据QJsonValue techDataValue = rootObj.value("techData");QJsonArray techDataArray = techDataValue.toArray();for(int i = 0; i < techDataArray.size(); i++){QJsonValue value = techDataArray.at(i);QString str = value.toString();qDebug() << "str" << str;}
      

包含数组对象的json数据解析

  • json数据
    •   {"id":1002,"name":"Tom","schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 解析结果
    •   strName "Tom"iId 1002bSex trueiChinese 96iEnglish 82iMath 90strSchoolname "xiaoxue"strSchoolcity "Xian"strSchoolname "zhongxue"strSchoolcity "Xian"strSchoolname "daxue"strSchoolcity "Beijing"
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"schoolData\":[{\"schoolCity\":\"Xian\",\"schoolName\":\"xiaoxue\"},{\"schoolCity\":\"Xian\",\"schoolName\":\"zhongxue\"},{\"schoolCity\":\"Beijing\",\"schoolName\":\"daxue\"}],\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 解析json数据QJsonValue nameValue = rootObj.value("name");QString strName = nameValue.toString();qDebug() << "strName" << strName;QJsonValue idValue = rootObj.value("id");int iId = idValue.toInt();qDebug() << "iId" << iId;QJsonValue sexValue = rootObj.value("sex");bool bSex = sexValue.toBool();qDebug() << "bSex" << bSex;// 解析scoreData节点的json数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();QJsonValue chineseValue = scoreDataObj.value("Chinese");int iChinese = chineseValue.toInt();qDebug() << "iChinese" << iChinese;QJsonValue englishValue = scoreDataObj.value("English");int iEnglish = englishValue.toInt();qDebug() << "iEnglish" << iEnglish;QJsonValue mathValue = scoreDataObj.value("Math");int iMath = mathValue.toInt();qDebug() << "iMath" << iMath;// 解析schoolData数组对象的json数据QJsonValue schoolDataValue = rootObj.value("schoolData");QJsonArray schoolDataValueArray = schoolDataValue.toArray();for(int i = 0; i < schoolDataValueArray.size(); i++){QJsonValue value = schoolDataValueArray.at(i);QJsonObject obj = value.toObject();QJsonValue schoolnameValue = obj.value("schoolName");QString strSchoolname = schoolnameValue.toString();qDebug() << "strSchoolname" << strSchoolname;QJsonValue schoolcityValue = obj.value("schoolCity");QString strSchoolcity = schoolcityValue.toString();qDebug() << "strSchoolcity" << strSchoolcity;}
      

json数据修改

  • 原始json数据
    •   {"id":1002,"name":"Tom","techData":["C++","JAVA","PYTHON"], "schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 修改后的json数据
    •   {"id":1002,"name":"Jack", // Tom修改为Jack"techData":["C++","JAVA","GO"], // PYTHON修改为GO "schoolData":[{"schoolCity":"Baoji","schoolName":"xiaoxue"}, // Xian改为Baoji{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":100, // 96修改为100"English":82,"Math":90},"sex":true}
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"techData\":[\"C++\",\"JAVA\",\"PYTHON\"], \"schoolData\":[{\"schoolCity\":\"Xian\",\"schoolName\":\"xiaoxue\"},{\"schoolCity\":\"Xian\",\"schoolName\":\"zhongxue\"},{\"schoolCity\":\"Beijing\",\"schoolName\":\"daxue\"}],\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";// 将json数据转为json文档QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}// 获取根对象QJsonObject rootObj = rootDoc.object();// 修改数据rootObj["name"] = "Jack";// 修改数据对象QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();scoreDataObj["Chinese"] = 100;rootObj["scoreData"] = scoreDataObj;// 修改数组QJsonValue techDataValue = rootObj.value("techData");QJsonArray techDataArray = techDataValue.toArray();for(int i = 0; i < techDataArray.size(); i++){if(techDataArray.at(i).toString().compare("PYTHON") == 0){techDataArray.replace(i, "GO");break;}}rootObj["techData"] = techDataArray;// 修改数组对象QJsonValue schoolDataValue = rootObj.value("schoolData");QJsonArray schoolDataArray = schoolDataValue.toArray();for(int i = 0; i < schoolDataArray.size(); i++){QJsonObject obj = schoolDataArray.at(i).toObject();if(obj.value("schoolName").toString().compare("xiaoxue") == 0){obj["schoolCity"] = "Baoji";schoolDataArray.replace(i, obj);break;}}rootObj["schoolData"] = schoolDataArray;// 将json数据对象转为字符串QJsonDocument document;document.setObject(rootObj);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

新增json数据

  • 原始json数据
    •   {"id":1002,"name":"Tom","techData":["C++", "JAVA", "PYTHON"], "schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96,"English":82,"Math":90},"sex":true}
      
  • 新增相应字段后的json数据
    •   {"class":5, // 新增项"home":{   // 新增项"father":52,"mather":52},"id":1002,"name":"Tom","schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"},{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"},{"schoolCity":"shanghai","schoolName":"boshi"} // 新增项],"scoreData":{"Chinese":96,"English":82,"Math":90,"Physics":100 // 新增项},"sex":true,"techData":["C++","JAVA","PYTHON","GO"] //新增GO数据}
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"techData\":[\"C++\",\"JAVA\",\"PYTHON\"], \"schoolData\":[{\"schoolCity\":\"Xian\",\"schoolName\":\"xiaoxue\"},{\"schoolCity\":\"Xian\",\"schoolName\":\"zhongxue\"},{\"schoolCity\":\"Beijing\",\"schoolName\":\"daxue\"}],\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "parse json data failed.";return false;}QJsonObject rootObj = rootDoc.object();// 新增数据rootObj.insert("class", 5);// 新增数据对象QJsonObject homeObject;homeObject.insert("father", 52);homeObject.insert("mather", 52);rootObj.insert("home", homeObject);// 在数据对象中新增数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();scoreDataObj.insert("Physics", 100);rootObj["scoreData"] = scoreDataObj;// 在数组中新增数据QJsonValue techDataValue = rootObj.value("techData");QJsonArray techDataArray = techDataValue.toArray();techDataArray.append("GO");rootObj["techData"] = techDataArray;// 在数组对象中新增数据QJsonValue schoolDataValue = rootObj.value("schoolData");QJsonArray schoolDataArray = schoolDataValue.toArray();QJsonObject doctorObj;doctorObj.insert("schoolName", "boshi");doctorObj.insert("schoolCity", "shanghai");schoolDataArray.append(doctorObj);rootObj["schoolData"] = schoolDataArray;QJsonDocument document;document.setObject(rootObj);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

删除json数据

  • 原始json数据
    •   {"id":1002,"name":"Tom", //此项删除"techData":["C++","JAVA","PYTHON"], // PYTHON删除 "schoolData":[{"schoolCity":"Xian","schoolName":"xiaoxue"}, // 此项删除{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"Chinese":96, //此项删除"English":82,"Math":90},"sex":true}
      
  • 删除相应字段后的json数据
    •   {"id":1002,"techData":["C++","JAVA"], "schoolData":[{"schoolCity":"Xian","schoolName":"zhongxue"},{"schoolCity":"Beijing","schoolName":"daxue"}],"scoreData":{"English":82,"Math":90},"sex":true}
      
  • 代码
    •   QByteArray jsonData = "{\"id\":1002,\"name\":\"Tom\",\"techData\":[\"C++\",\"JAVA\",\"PYTHON\"], \"schoolData\":[{\"schoolCity\":\"Xian\",\"schoolName\":\"xiaoxue\"},{\"schoolCity\":\"Xian\",\"schoolName\":\"zhongxue\"},{\"schoolCity\":\"Beijing\",\"schoolName\":\"daxue\"}],\"scoreData\":{\"Chinese\":96,\"English\":82,\"Math\":90},\"sex\":true}";QJsonParseError result;QJsonDocument rootDoc = QJsonDocument::fromJson(jsonData, &result);if(rootDoc.isNull() || result.error != QJsonParseError::NoError){qDebug() << "rootdoc is null";return false;}QJsonObject rootObj = rootDoc.object();// 删除数据rootObj.remove("name");// 删除数据对象中的数据QJsonValue scoreDataValue = rootObj.value("scoreData");QJsonObject scoreDataObj = scoreDataValue.toObject();scoreDataObj.remove("Chinese");rootObj["scoreData"] = scoreDataObj;// 删除数组中的数据QJsonValue techDataValue = rootObj.value("techData");QJsonArray techDataArray = techDataValue.toArray();for(int i = 0; i < techDataArray.size(); i++){if(techDataArray.at(i).toString().compare("PYTHON") == 0){techDataArray.removeAt(i);break;}}rootObj["techData"] = techDataArray;// 删除数组对象中的数据QJsonValue schoolDataValue = rootObj.value("schoolData");QJsonArray schoolDataArray = schoolDataValue.toArray();for(int i = 0; i < schoolDataArray.size(); i++){QJsonObject obj = schoolDataArray.at(i).toObject();if(obj.value("schoolName").toString().compare("xiaoxue") == 0){schoolDataArray.removeAt(i);break;}}rootObj["schoolData"] = schoolDataArray;QJsonDocument document;document.setObject(rootObj);QByteArray byJsonData = document.toJson(QJsonDocument::Compact);QString strJson(byJsonData);
      

http://www.mrgr.cn/news/7370.html

相关文章:

  • 复杂的编辑表格
  • JavaEE----Servlet过滤器
  • 从redis的set中随机取出一个元素,并且不做删除
  • 2024易航php加密平台PHP网站源码
  • 音视频封装格式之FLV
  • 2024年最新最全面的软件测试自动化面试题
  • 如何构建基于Vue的HSK学习平台?揭秘高效中文学习工具的开发
  • AMBA总线协议与PCIe总线协议的区别
  • 为什么最近多模态大模型工作中用Q-Former结构的变少了?
  • react如何解决setTimeout获取不到最新数据问题
  • unoredered_mapunordered_set封装
  • Python函数式编程实践:让代码更加优雅简洁
  • OpenCV几何图像变换(9)仿射变换函数warpAffine()的使用
  • UGUI空白可点击组件,减少重绘
  • 一拖二快充线市场需求 - LDR6020
  • VulnStack1-内网渗透记录
  • linux自定义命令
  • Python单例模式:深入解析与应用
  • 基于x86 平台opencv的图像采集和seetaface6的人脸检测功能
  • 软件工程造价师习题练习 16