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

QT-JSON

#include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QFile>#include <QDebug>void createJsonFile() {// 创建一个JSON对象  键值对QJsonObject jsonObj;jsonObj["name"] = "John Doe";jsonObj["age"] = 30;jsonObj["email"] = "john.doe@example.com";// 创建一个JSON数组QJsonArray jsonArr;jsonArr.append("C++");jsonArr.append("Python");
jsonArr.append("JavaScript");jsonArr.append(123);// 将数组添加到JSON对象
jsonObj["languages"] = jsonArr;// 将JSON对象转换为JSON文档
QJsonDocument jsonDoc(jsonObj);// 将JSON文档转换为字符串(也可以是压缩格式)
QByteArray jsonData = jsonDoc.toJson(QJsonDocument::Indented);// 将JSON数据写入文件
QFile file("output.json");if (!file.open(QIODevice::WriteOnly)) {qDebug() << "Failed to open file for writing";return;}file.write(jsonData);file.close();}qDebug() << "JSON data saved to output.json";int main() {createJsonFile();return 0;}

#include "widget.h"#include "ui_widget.h"#include <QFile>#include <QJsonArray>#include <QJsonDocument>#include <QJsonObject>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{}ui->setupUi(this);QJsonObject rootObj;rootObj["cityid"]  = "1010100";rootObj["date"]    
= "2024-01-23";rootObj["weather"] = "雨夹雪";rootObj["tmp"]     
= 3;QJsonArray jsonArray;jsonArray.append("data1");jsonArray.append("data2");jsonArray.append("data3");jsonArray.append(100);rootObj["testArry"] = jsonArray;QJsonDocument jsonDoc(rootObj);QByteArray jsonArry = jsonDoc.toJson();QFile file("D:/QT/test.json");file.open(QIODevice::WriteOnly);file.write(jsonArry);file.close();Widget::~Widget(){delete ui;}

#include "widget.h"#include "ui_widget.h"#include <QFile>#include <QJsonArray>#include <QJsonDocument>#include <QJsonObject>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);QJsonObject rootObj;rootObj["cityid"]  = "1010100";rootObj["date"]    
= "2024-01-23";rootObj["weather"] = "雨夹雪";
= 3;rootObj["tmp"]     
//Json数组
QJsonArray jsonArray;jsonArray.append("data1");jsonArray.append("data2");jsonArray.append("data3");jsonArray.append(100);rootObj["testArry"] = jsonArray;QJsonObject alarmObj;alarmObj["alamType"] = "雪灾";alarmObj["alamLeve"] = "黄色";alarmObj["alamTitle"] = "福州市警告老陈多穿点衣服";rootObj["alam"] = alarmObj;QJsonObject day0;day0["day"] = "星期一";day0["wea"] = "晴";day0["tem"] = 5.7;QJsonObject day1;day1["day"] = "星期二";day1["wea"] = "晴";day1["tem"] = 7;QJsonObject day2;day2["day"] = "星期三";day2["wea"] = "多云";day2["tem"] = 17;QJsonArray dayArray;dayArray.append(day0);dayArray.append(day1);dayArray.append(day2);rootObj["days"] = dayArray;//通过QJsonDocument把JSON数据转换成QByteArrayQJsonDocument jsonDoc(rootObj);QByteArray jsonArry = jsonDoc.toJson();QFile file("D:/QT/test.json");file.open(QIODevice::WriteOnly);file.write(jsonArry);file.close();}Widget::~Widget(){delete ui;}

 #include <QJsonDocument>#include <QJsonObject>#include <QJsonArray>#include <QDebug>void parseJson() {// JSON字符串/*R 是用于定义原始字符串字面量(Raw String Literal)的标记。在C++中,原始字符串字面量是一种方便的语法,用于创建包含多行文本和特殊字符的字符串,而无需转义。R"("chenlichen")"*/QString testStr = "chenli\"c";QString jsonString = R"({"name": "John Doe","age": 30,"email": "john.doe@example.com","skills": ["C++", "Python", "JavaScript"]})";/*jsonString = "{\n""    \"name\": \"John Doe\",\n""    \"age\": 30\n""}";*/// 将JSON字符串转换为QJsonDocumentQJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());// 检查JSON文档是否包含一个对象if (!jsonDoc.isNull() && jsonDoc.isObject()) {// 获取JSON对象QJsonObject jsonObj = jsonDoc.object();
// 访问对象的键值
QString name = jsonObj["name"].toString();int age = jsonObj["age"].toInt();QString email = jsonObj["email"].toString();qDebug() << "Name:" << name;qDebug() << "Age:" << age;qDebug() << "Email:" << email;}// 处理JSON数组
if (jsonObj.contains("skills") && jsonObj["skills"].isArray()) {QJsonArray skillsArray = jsonObj["skills"].toArray();for (const QJsonValue &value : skillsArray) {qDebug() << "Skill:" << value.toString();}}} else {qDebug() << "Invalid JSON...";}int main() {parseJson();return 0;}

#include <QJsonDocument>#include <QJsonObject>#include <QMap>#include <QDebug>void parseJsonToMap() {// JSON字符串
QString jsonString = R"({"name": "John Doe","age": "30","email": "john.doe@example.com"})";// 将JSON字符串转换为QJsonDocumentQJsonDocument jsonDoc = QJsonDocument::fromJson(jsonString.toUtf8());// 准备一个QMap来存储解析的数据
QMap<QString, QString> dataMap;// 解析JSON对象并填充QMapif (!jsonDoc.isNull() && jsonDoc.isObject()) {QJsonObject jsonObj = jsonDoc.object();for (auto key : jsonObj.keys()) {dataMap[key] = jsonObj.value(key).toString();}} else {qDebug() << "Invalid JSON...";}// 打印QMap内容
for (auto key : dataMap.keys()) {qDebug() << key << ":" << dataMap[key];}}int main() {parseJsonToMap();return 0;}

#include "widget.h"#include "ui_widget.h"#include <QFile>#include <QJsonDocument>#include <QJsonObject>#include <QDebug>#include <QJsonArray>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);//第一步:读取JSON文件保存到QByteArray中
QFile file("D:/QT/test.json");file.open(QIODevice::ReadOnly);QByteArray rawData = file.readAll();file.close();//第二步:把QByteArray转成JSONDocQJsonDocument jsonDoc = QJsonDocument::fromJson(rawData);if( !jsonDoc.isNull() && jsonDoc.isObject()){//第三步:把JsonDoc转成JsonObjQJsonObject jsonRoot = jsonDoc.object();//第四步:如果解析普通键值对,通过“下表键”来获取值
QString strW      
= jsonRoot["weather"].toString();QString strCityId = jsonRoot["cityid"].toString();int tempretrue = jsonRoot["tmp"].toInt();qDebug() << strW;qDebug() << strCityId;qDebug() << QString::number(tempretrue);//第五步:判读是否是一个数组if(jsonRoot.contains("testArry") && jsonRoot["testArry"].isArray()){qDebug() << "array";//如果是数组,转换成JSON数组QJsonArray testArray = jsonRoot["testArry"].toArray();//遍历数组,访问每一项for(QJsonValue val : testArray){//QJsonValue的type函数返回数据类型,根据不同的数据类型处理数据// QJsonValue::Type t = val.type();switch (val.type()) {case QJsonValue::Double:qDebug() << QString::number(val.toDouble());break;case QJsonValue::String:qDebug() << val.toString();break;case QJsonValue::Object:break;}}}//第六步:判断某个键对应的值,是否是一个json对象if(jsonRoot.contains("alam") && jsonRoot["alam"].isObject()){//转成Json对象后处理QJsonObject alamObj = jsonRoot["alam"].toObject();qDebug() << alamObj["alamLeve"].toString();qDebug() << alamObj["alamTitle"].toString();qDebug() << alamObj["alamType"].toString();}if(jsonRoot.contains("days") && jsonRoot["days"].isArray()){QJsonArray dayArray = jsonRoot["days"].toArray();for(QJsonValue val : dayArray){//if(val.type() ==QJsonValue::Object ){if(val.isObject()){QJsonObject obj = val.toObject();qDebug() << obj["day"].toString();qDebug() << QString::number(obj["tem"].toDouble());qDebug() << obj["wea"].toString();}}}}}Widget::~Widget(){delete ui;}

相关文章:

  • B站视频下载器 v1.0.4|免登录下载1080P视频
  • LabVIEW双光子显微镜开发
  • C++四种类型转换方式
  • 017搜索之深度优先搜索——算法备赛
  • 宝塔专属清理区域,宝塔清理MySQL日志(高效释放空间)
  • Azure Devops 系列之三- vscode部署function app
  • LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++
  • 李臻20242817_安全文件传输系统项目报告_第14周
  • 力扣面试150题--二叉树的锯齿形层序遍历
  • 自动驾驶系统研发系列—激光雷达感知延迟:自动驾驶安全的隐形隐患?
  • AWS之数据分析
  • 【科研绘图系列】R语言绘制论文组合图形(multiple plots)
  • AWS之迁移与传输服务
  • 汽车安全 2030 预测 (功能安全FuSa、预期功能安全SOTIF、网络安全CyberSecurity):成本、效益与行业影响
  • 汽车安全:功能安全FuSa、预期功能安全SOTIF与网络安全Cybersecurity 解析
  • 机器学习-ROC曲线​​ 和 ​​AUC指标
  • 【Unity博客节选】Timeline 内部结构 IntervalTree 分析
  • 基于微信小程序的垃圾分类系统
  • 十三、【核心功能篇】测试计划管理:组织和编排测试用例
  • vue-11(命名路由和命名视图)
  • 深圳西乡做网站/seo系统培训哪家好
  • 专业做网站+上海/宁波seo怎么推广
  • 什么语言做网站简单/常见搜索引擎有哪些
  • 怎么建立一个个人网站/seo岗位有哪些
  • 大东吴建设新材料公司网站/互联网营销推广公司
  • 动态网站中搜索用php怎么做代码/网络营销策略分析方法