当前位置:   article > 正文

Qt之JSON基础操作_qt json

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示例:

  1. {
  2. "name": "John Smith",
  3. "age": 30,
  4. "email": "john@example.com",
  5. "isStudent": false,
  6. "hobbies": ["reading", "traveling", "photography"],
  7. "address": {
  8. "street": "123 Main St",
  9. "city": "New York",
  10. "country": "USA"
  11. }
  12. }

这个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转换为整型  

代码:

  1. //构建对象,可以是bool,int,QString,char*,json对象,json数组
  2. //json值,double类型
  3. QJsonValue jsonValue(true);
  4. QJsonValue jsonValue1(1);
  5. QJsonValue jsonValue2(QString("string"));
  6. QJsonValue jsonValue3(1.11111);
  7. QJsonValue jsonValue4(QJsonObject({{"a",1}}));
  8. QJsonValue jsonValue5(jsonValue);
  9. //判断值的类型
  10. if(jsonValue.isBool()){
  11. qDebug()<<"是Bool类型";
  12. }
  13. if(jsonValue4.isObject()){
  14. qDebug()<<"是json对象类型";
  15. }
  16. if(jsonValue2.isString()){
  17. qDebug()<<"是String类型";
  18. }
  19. //获取值
  20. qDebug()<<jsonValue.toBool();
  21. qDebug()<<jsonValue1.toInt();
  22. qDebug()<<jsonValue2.toString();
  23. qDebug()<<jsonValue3.toDouble();
  24. qDebug()<<jsonValue4.toObject().value("a").toInt();
  25. qDebug()<<jsonValue5.toBool();
  26. //获取值的类型
  27. qDebug()<<jsonValue1.type();

QJsonArray(数组类型):

        

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

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

代码:

  1. //构建对象
  2. QJsonArray jsonArray={"age",22,QString("Ryan")};
  3. QJsonValue value(2023);
  4. QJsonValue value1("日期");
  5. //在末尾添加数据
  6. jsonArray.append(value);
  7. //插入数据
  8. jsonArray.insert(0,value1);
  9. //获取指定位置的值
  10. qDebug()<<jsonArray.at(0).toString();
  11. //指向数组第一项
  12. qDebug()<<*jsonArray.begin();
  13. //判断数组是否为空
  14. if(!jsonArray.isEmpty()){
  15. qDebug()<<"数组不为空";
  16. }
  17. //判断数组的大小
  18. qDebug()<<jsonArray.size();
  19. //输出全部键值对
  20. for(int i =0 ;i<jsonArray.size();i++){
  21. qDebug()<<jsonArray.at(i);
  22. }

QJsonObject(对象类型):

        

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

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

代码:

  1. //直接构建json对象
  2. QJsonObject jsonObj{{"A",1},{"B",2},{"C",3}};
  3. //返回指向json对象的第一项
  4. qDebug()<<jsonObj.begin().key();
  5. qDebug()<<jsonObj.begin().value().toInt();
  6. //指向寻找的键的那一项
  7. qDebug()<<jsonObj.constFind("A").key();
  8. qDebug()<<jsonObj.constFind("A").value().toInt();
  9. //判断json对象是否存在这个键
  10. if(jsonObj.contains("A")){
  11. qDebug()<<"存在";
  12. }
  13. //返回json对象键值对的数量
  14. qDebug()<<jsonObj.count();
  15. qDebug()<<jsonObj.size();
  16. //删除某个键
  17. jsonObj.remove("A");
  18. if(!jsonObj.contains("A")){
  19. qDebug()<<"删除A成功";
  20. }
  21. jsonObj.take("B");
  22. if(!jsonObj.contains("B")){
  23. qDebug()<<"删除B成功";
  24. }
  25. //取得某个键的值
  26. qDebug()<<"C:"<<jsonObj.value("C").toInt();
  27. //插入数据
  28. jsonObj.insert("age",10);
  29. //遍历 输出数组所有数据
  30. for(auto it = jsonObj.begin();it!=jsonObj.end();it++){
  31. qDebug()<<it.key()<<it.value();
  32. }

 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数组。

代码:

  1. //构建对象
  2. QJsonDocument jsonDocu(jsonObj);
  3. if(jsonDocu.isObject()){
  4. qDebug()<<"是对象";
  5. }
  6. //以JSON格式输出对象的全部数据
  7. qDebug()<<jsonDocu.toJson();
  8. QJsonDocument jsonDocu2(jsonArray);
  9. if(jsonDocu.isObject()){
  10. qDebug()<<"是数组";
  11. }
  12. //以JSON格式输出数组的全部数据
  13. qDebug()<<jsonDocu2.toJson();

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/1016472
推荐阅读
相关标签
  

闽ICP备14008679号