Qt之JSON基础操作

目录

JSON是什么

在QT中怎么操作JSON

QJsonValue(值类型):

QJsonArray(数组类型):

QJsonObject(对象类型):

 QJsonDocument(文档类型):


JSON是什么

        

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于数据的存储和传输。它基于JavaScript语法,但已成为独立于编程语言的通用数据格式。

JSON使用简洁易读的文本格式表示数据,具有以下特点:

  1. 数据结构:JSON支持两种主要数据结构,即对象(Object)和数组(Array)。

    • 对象由键值对组成,每个键值对之间使用冒号(:)分隔,键值对之间使用逗号(,)分隔,并且整个对象包含在大括号({})中。
    • 数组由多个值组成,值之间使用逗号(,)分隔,并且整个数组包含在方括号([])中。
  2. 值类型:JSON支持多种值类型,包括字符串(String)、数字(Number)、布尔值(Bool)、空值(Null)、对象和数组。

  3. 字符串表示:JSON的字符串使用双引号("")表示,例如:"Hello, World!"。

  4. 嵌套结构:JSON允许通过将对象或数组作为值来创建复杂的嵌套结构。

下面是一个简单的JSON示例:

{
  "name": "John Smith",
  "age": 30,
  "email": "john@example.com",
  "isStudent": false,
  "hobbies": ["reading", "traveling", "photography"],
  "address": {
    "street": "123 Main St",
    "city": "New York",
    "country": "USA"
  }
}

这个json数据首先用{}来表示整个数据是一个对象,这个对象里面包括name,age,email,isStudent这些值,还包括了一个hobbies数组,以及一个address对象,这个对象还包括了一些street,city,country的值。

在QT中怎么操作JSON

        在Qt中使用QJsonValue(值类型),QJsoArray(数组类型),QJsonObject(对象类型),QjsonDocument(文档类型)。 这些类提供了处理JSON数据的基本工具。使用这些类的组合,可以解析、创建、修改和访问JSON数据。

QJsonValue(值类型):

        

        QJsonValue是Qt中表示JSON值的类。它可以表示JSON的基本数据类型,如字符串、数字、布尔值,以及更复杂的数据结构,如对象和数组。QJsonValue具有以下常用函数:

  1. isNull():检查QJsonValue是否为空。
  2. 1.isUndefined():检查QJsonValue是否未定义。
  3. isBool():检查QJsonValue是否是布尔值。
  4. isDouble():检查QJsonValue是否是双精度浮点数。
  5. isString():检查QJsonValue是否是字符串。
  6. isObject():检查QJsonValue是否是对象。
  7. isArray():检查QJsonValue是否是数组。
  8. toBool():将QJsonValue转换为布尔值。
  9. toDouble():将QJsonValue转换为双精度浮点数。
  10. toString():将QJsonValue转换为字符串。
  11. toInt(): 将QJsonValue转换为整型  

代码:

    //构建对象,可以是bool,int,QString,char*,json对象,json数组
    //json值,double类型
    QJsonValue jsonValue(true);
    QJsonValue jsonValue1(1);
    QJsonValue jsonValue2(QString("string"));
    QJsonValue jsonValue3(1.11111);
    QJsonValue jsonValue4(QJsonObject({{"a",1}}));
    QJsonValue jsonValue5(jsonValue);
    //判断值的类型
    if(jsonValue.isBool()){
        qDebug()<<"是Bool类型";
    }
    if(jsonValue4.isObject()){
        qDebug()<<"是json对象类型";
    }
    if(jsonValue2.isString()){
        qDebug()<<"是String类型";
    }
    //获取值
    qDebug()<<jsonValue.toBool();
    qDebug()<<jsonValue1.toInt();
    qDebug()<<jsonValue2.toString();
    qDebug()<<jsonValue3.toDouble();
    qDebug()<<jsonValue4.toObject().value("a").toInt();
    qDebug()<<jsonValue5.toBool();
    //获取值的类型
    qDebug()<<jsonValue1.type();

QJsonArray(数组类型):

        

        QJsonArray(数组类型): QJsonArray是Qt中表示JSON数组的类。它可以包含多个QJsonValue对象,表示一组有序的JSON值。QJsonArray提供了以下常用函数:

  1. append():将QJsonValue添加到数组末尾。
  2. insert(0: 在指定位置插入数据。
  3. at():返回数组中给定索引处的QJsonValue。
  4. size():返回数组的大小(元素数量)。
  5. isEmpty():判断数组是否为空。    

代码:

    //构建对象
    QJsonArray jsonArray={"age",22,QString("Ryan")};
    QJsonValue value(2023);
    QJsonValue value1("日期");
    //在末尾添加数据
    jsonArray.append(value);
    //插入数据
    jsonArray.insert(0,value1);
    //获取指定位置的值
    qDebug()<<jsonArray.at(0).toString();
    //指向数组第一项
    qDebug()<<*jsonArray.begin();
    //判断数组是否为空
    if(!jsonArray.isEmpty()){
        qDebug()<<"数组不为空";
    }
    //判断数组的大小
    qDebug()<<jsonArray.size();
    //输出全部键值对
    for(int i =0 ;i<jsonArray.size();i++){
        qDebug()<<jsonArray.at(i);
    }

QJsonObject(对象类型):

        

        QJsonObject是Qt中表示JSON对象的类。它可以包含多个键值对,其中每个键都是字符串,对应的值是一个QJsonValue对象。QJsonObject提供了以下常用函数:

  1. insert():将键值对插入到对象中。
  2. remove():从对象中删除指定键的键值对。
  3. contains():检查对象是否包含指定的键。
  4. value():返回与给定键关联的QJsonValue。
  5. keys():返回对象中所有键的列表。

代码:

   //直接构建json对象
    QJsonObject jsonObj{{"A",1},{"B",2},{"C",3}};
    
    //返回指向json对象的第一项
    qDebug()<<jsonObj.begin().key();
    qDebug()<<jsonObj.begin().value().toInt();
    //指向寻找的键的那一项
    qDebug()<<jsonObj.constFind("A").key();
     qDebug()<<jsonObj.constFind("A").value().toInt();
    //判断json对象是否存在这个键
    if(jsonObj.contains("A")){
       qDebug()<<"存在";
    }
    //返回json对象键值对的数量
    qDebug()<<jsonObj.count();
    qDebug()<<jsonObj.size();
    //删除某个键
    jsonObj.remove("A");
    if(!jsonObj.contains("A")){
       qDebug()<<"删除A成功";
    }
    jsonObj.take("B");
    if(!jsonObj.contains("B")){
       qDebug()<<"删除B成功";
    }
    //取得某个键的值
    qDebug()<<"C:"<<jsonObj.value("C").toInt();
    //插入数据
    jsonObj.insert("age",10);
    //遍历  输出数组所有数据
    for(auto it = jsonObj.begin();it!=jsonObj.end();it++){
        qDebug()<<it.key()<<it.value();

    }

 QJsonDocument(文档类型):

        

        QJsonDocument是Qt中表示整个JSON文档的类。它可以将JSON数据解析为QJsonObject或QJsonArray,或将QJsonObject或QJsonArray转换为JSON字符串。QJsonDocument提供了以下常用函数:

  1. fromJson():将JSON字符串解析为QJsonDocument对象。
  2. toVariant():将QJsonDocument转换为QVariant对象。
  3. toJson():将QJsonDocument对象转换为JSON字符串。
  4. isObject():检查QJsonDocument是否表示JSON对象。
  5. isArray():检查QJsonDocument是否表示JSON数组。

代码:

    //构建对象
    QJsonDocument  jsonDocu(jsonObj);
    if(jsonDocu.isObject()){
        qDebug()<<"是对象";
    }
    //以JSON格式输出对象的全部数据
    qDebug()<<jsonDocu.toJson();
    QJsonDocument  jsonDocu2(jsonArray);
    if(jsonDocu.isObject()){
        qDebug()<<"是数组";
    }
    //以JSON格式输出数组的全部数据
    qDebug()<<jsonDocu2.toJson();

感谢阅读,下期更新json文档的解析!!!

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
详细目录 1. 序 2. Qt 简介 3. Hello, world! 4. 信号槽 5. 自定义信号槽 6. Qt 模块简介 7. MainWindow 简介 8. 添加动作 9. 资源文件 10. 对象模型 11. 布局管理器 12. 菜单栏、工具栏和状态栏 13. 对话框简介 14. 对话框数据传递 15. 标准对话框 QMessageBox 16. 深入 Qt5 信号槽新语法 17. 文件对话框 18. 事件 19. 事件的接受与忽略 20. event() 21. 事件过滤器 22. 事件总结 23. 自定义事件 24. Qt 绘制系统简介 25. 画刷和画笔 26. 反走样 27. 渐变 28. 坐标系统 29. 绘制设备 30. Graphics View Framework 31. 贪吃蛇游戏(1) 32. 贪吃蛇游戏(2) 33. 贪吃蛇游戏(3) 34. 贪吃蛇游戏(4) 35. 文件 36. 二进制文件读写 37. 文本文件读写 38. 存储容器 39. 遍历容器 40. 隐式数据共享 41. model/view 架构 42. QListWidget、QTreeWidget 和 QTableWidget 43. QStringListModel 44. QFileSystemModel 45. 模型 46. 视图和委托 47. 视图选择 48. QSortFilterProxyModel 49. 自定义只读模型 50. 自定义可编辑模型 51. 布尔表达式树模型 52. 使用拖放 53. 自定义拖放数据 54. 剪贴板 55. 数据库操作 56. 使用模型操作数据库 57. 可视化显示数据库数据 58. 编辑数据库外键 59. 使用流处理 XML 60. 使用 DOM 处理 XML 61. 使用 SAX 处理 XML 62. 保存 XML 63. 使用 QJson 处理 JSON 64. 使用 QJsonDocument 处理 JSON 65. 访问网络(1) 66. 访问网络(2) 67. 访问网络(3) 68. 访问网络(4) 69. 进程 70. 进程间通信 71. 线程简介 72. 线程和事件循环 73. Qt 线程相关类 74. 线程和 QObject 75. 线程总结 76. QML 和 QtQuick 2 77. QML 语法 78. QML 基本元素 79. QML 组件 80. 定位器 81. 元素布局 82. 输入元素 其他文章 宏定义中的 do {…} while (0) C++:在堆上创建对象,还是在栈上?
### 回答1: Qt是一个跨平台的应用程序开发框架,可用于开发图形界面和网络应用程序。它的json和http库提供了方便的方式来进行网络通信和数据交互。下面我将简要介绍在Qt中如何使用json和http进行post数据到数据库。 首先,我们需要使用Qt的网络模块来发送HTTP POST请求。可以使用QNetworkAccessManager类来发送请求,并使用QNetworkRequest类来设置请求的URL、头信息和其他参数。然后,使用QNetworkReply类来接收服务器的响应。 接下来,我们需要将待发送的数据转换为json格式。可以使用QJsonDocument类来创建一个json文档对象,并使用QJsonObject和QJsonArray类来创建和操作json对象和数组。将需要发送的数据转换为json格式后,可以使用QJsonDocument的toJson()函数将其转换为QString类型的数据。 然后,将转换后的json数据添加到HTTP请求的body中。可以使用QHttpMultiPart类来创建一个multipart/form-data类型的数据实体,将json数据添加到其中,然后将该实体添加到HTTP请求的body中。 最后,发送HTTP请求,并接收服务器的响应。通过connect()函数以及相应的信号和槽函数来处理请求的发送和响应的接收。可以在槽函数中解析服务器响应的json数据,并根据需要将其存储到数据库中。 总结起来,使用Qtjson和http库进行数据库的post操作的步骤如下:创建并设置HTTP请求、将待发送的数据转换为json格式、将json数据添加到HTTP请求的body中、发送HTTP请求并接收服务器的响应、解析并处理响应的json数据。 以上是使用Qt进行json、http和数据库操作的基本步骤,具体实现还需要结合具体的业务逻辑和数据库操作接口来进行。希望这些信息对您有所帮助! ### 回答2: Qt是一款跨平台的C++开发框架,可以方便地进行JSON数据的处理、HTTP的POST请求以及与数据库的交互。 首先,Qt提供了QJsonDocument类和相关的函数,可以方便地完成JSON数据的解析和生成。可以使用QJsonDocument::fromJson()函数将JSON数据转换为QJsonDocument对象,再使用QJsonObject和QJsonArray等类对JSON数据进行操作。另外,使用QJsonDocument::toJson()函数可以将QJsonDocument对象转换为JSON格式的字符串。 其次,Qt提供了QNetworkAccessManager类和相关的函数,可以方便地进行HTTP的POST请求。可以使用QNetworkRequest类设置请求的URL、请求头等信息,并使用QNetworkReply类获取服务器返回的数据。可以通过发送POST请求来将JSON数据发送给服务器,并在收到服务器返回的数据后进行处理。 此外,Qt还提供了QtSql模块,可以方便地与数据库进行交互。可以使用QSqlDatabase类来连接到数据库,并使用QSqlQuery类执行SQL语句。通过执行INSERT语句,可以将JSON数据存储到数据库中。同样,可以使用SELECT语句从数据库中读取数据,并将其转换为JSON格式进行处理和显示。 综上所述,使用Qt可以方便地完成JSON数据的处理、HTTP的POST请求以及与数据库的交互。可以通过QJsonDocument类解析和生成JSON数据,使用QNetworkAccessManager类发送HTTP的POST请求,以及使用QtSql模块与数据库进行交互,实现数据的存储和读取。对于JSON数据的处理,可以将其转换为QJsonObject和QJsonArray对象进行操作。对于HTTP的POST请求,可以通过QNetworkRequest类设置请求信息,并使用QNetworkReply类获取服务器返回的数据。对于数据库的操作,可以使用QSqlDatabase类连接数据库,并使用QSqlQuery类执行SQL语句。 ### 回答3: Qt 是一个跨平台的应用程序框架,可以用于开发各种类型的应用程序。在 Qt 中,可以使用 JSON 进行数据交换和存储。JSON 是一种轻量级的数据交换格式,易于阅读和编写。 在 Qt 中,可以使用 QJsonDocument 类来处理 JSON 数据。可以将 JSON 字符串转换为 QJsonDocument 对象,然后通过 QJsonValue 的方法获取其中的数据。还可以将 QVariantMap 或 QVariantList 转换为 JSON 字符串。 Qt 还提供了网络模块 QNetworkAccessManager,可以进行 HTTP 请求。可以使用 QNetworkRequest 类来设置请求的 URL、请求头和请求方法等信息。使用 QNetworkAccessManager 类的 post() 方法可以发送 HTTP POST 请求,并使用 QNetworkReply 类接收服务器的响应结果。 在进行数据库操作时,可以使用 Qt 的数据库模块。Qt 提供了 QSqlDatabase 类来管理数据库连接,可以连接各种不同类型的数据库。可以使用 QSqlQuery 类执行 SQL 查询和操作。 使用这些类和方法,可以实现从 HTTP POST 请求中获取到 JSON 数据,并将其存储到数据库中。首先,使用 QNetworkAccessManager 发送 HTTP POST 请求,接收到响应后,使用 QJsonDocument 解析响应的 JSON 数据。然后,将解析后的数据插入到数据库中,可以通过 SQL 语句执行插入操作。 总之,Qt 提供了强大而灵活的工具和模块,可以方便地实现 JSON 数据的解析、HTTP POST 请求和数据库操作。使用这些功能,可以快速地开发出具有数据交换和存储功能的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值