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

QT JSON数据格式

一、概述

1、Json是一种轻量级的数据交换格式,它是独立与语言的,和语言没有任何关系,也就是说在任何一种语言里面都可以使用Json,这种数据格式用来组织数据。

2、Json中主要有两种数据格式:Json数组和Json对象,并且这两种格式可以交叉嵌套使用。

二、Json类

1、QJsonDocument

它封装了一个完整的JSON文档,并且可以从UTF-8编码的基于文本的表示,以及Qt自己的二进制格式读取和写入该文档。

2、QJsonArray

Json数组是一个值列表,可以通过从数组中插入和删除QJsonValue来操作该列表 

3、QJsonObject

Json对象是键值对的列表,其中键是唯一的字符串,值由QJsonValue表示  

4、QJsonValue

该类封装了JSON支持的数据类型 

三、QJsonDocument介绍

        QJsonObject和QJsonArray这两个对象的数据是不能直接转换为字符串类型的,如果要进行数据传输或者数据的持久化存储,操作的都是字符串而不是QJsonObject和QJsonArray类型,我们需要通过一个Json文档进行二者之间的转换。

1、QJsonObject 、QJsonArray  ===>   字符串 

(1)创建QJsonDocument对象

//创建QJsonDocument对象
QJsonDocument::QJsonDocument(const QJsonObject &object);
QJsonDocument::QJsonDocument(const QJsonArray &array);

(2) 将文件对象中的数据序列化

//二进制格式的json字符串
QByteArray QJsonDocument::toBinaryData() const;
//文本格式
QByteArray QJsonDocument::toJson(JsonFormat format = Indented) const;

(3)使用得到的字符串进行数据传输,或者磁盘文件持久化 

2、 字符串   ===>   QJsonObject 、QJsonArray

(1)将得到的Json格式的字符串通过QJsonDocument类的静态函数进行转换为QJsonDocument类对象

static QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation  = Validate);
//参数文件格式的Json字符串
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = nullptr);

(2) 将文档对象转换为json数组/对象

//判断文档对象中存储的数据是不是数组
bool QJsonDocument::isArray() const;
//判断文档对象中存储的数据是不是对象
bool QJsonDocument::isObject() const;

//文档对象中的数据格式转换为json对象
QJsonDocument QJsonDocument::object() const;
//文档对象中数据格式转换为json数组
QJsonDocument QJsonDocument::array() const;

四、QJsonValue介绍

1、在Qt中QJsonValue可以封装的基础数据类型有六种(和Json支持的类型一致)

(1)布尔类型

QJsonValue::Bool

(2)浮点类型(包括整形)

QJsonValue::Double 

(3)字符串类型

QJsonValue::String 

(4) Json数组类型

 QJsonValue::Array

(5) Json对象类型

 QJsonObject::Object

(6)空值类型 

QJsonValue::Null

 2、上面的类型可以通过QJsonValue的构造被封装成一个类对象

 //Json数组
 QJsonValue(const QJsonArray &a);
 //Json对象
 QJsonValue(const QJsonObject &o);

 //布尔类型
 QJsonValue(bool b);

 //浮点型、整形
 QJsonValue(double n);
 QJsonValue(int n);
 QJsonValue(qint64 v);

 //字符串
 QJsonValue(const QString &s);
 QJsonValue(QLatin1String s);

 //空值类型
 QJsonValue(Type = Null);

3、QJsonValue类型判断函数

 //是否是空值类型
 inline bool isNull() const { return type() == Null; }
 //是否是布尔类型
 inline bool isBool() const { return type() == Bool; }
 //是否是浮点类型(整形也是通过这个判断)
 inline bool isDouble() const { return type() == Double; }
 //是否是字符串类型
 inline bool isString() const { return type() == String; }
 //是否是Json数组
 inline bool isArray() const { return type() == Array; }
 //是否是Json对象
 inline bool isObject() const { return type() == Object; }
 //是否是未定义类型
 inline bool isUndefined() const { return type() == Undefined; }

4、QJsonValue类型转换函数

//转换为布尔类型
bool toBool(bool defaultValue = false) const;
//转换为整型
int toInt(int defaultValue = 0) const;
//转换为浮点型
double toDouble(double defaultValue = 0) const;
//转换为字符串类型
QString toString() const;
QString toString(const QString &defaultValue) const;
//转换为Json数组
QJsonArray toArray() const;
QJsonArray toArray(const QJsonArray &defaultValue) const;
//转换为Json对象
QJsonObject toObject() const;
QJsonObject toObject(const QJsonObject &defaultValue) const;

五、QJsonObject介绍

        以键值对的形式存储数据,键是QString类型,值是QJsonValue类型。提供了插入、删除和修改键值对的方法。

1、创建空的Json对象

QJsonObject();

2、将键值对添加到空对象中 

  iterator insert(const QString &key, const QJsonValue &value);  

 3、获取对象中键值对个数

   int size() const;
   inline int count() const { return size(); }
   inline int length() const { return size(); }

4、通过key得到value

 QJsonValue value(QStringView key) const;
 QJsonValue value(QLatin1String key) const;
 QJsonValue operator[] (QStringView key) const { return value(key); }
 QJsonValue operator[] (QLatin1String key) const { return value(key); } 

5、删除键值对

void remove(const QString &key);

QJsonValue take(const QString &key); 

六、QJsonArray介绍 

        QJsonArray是Qt框架中的一个类,用于表示JSON数组。JSON数组是一个有序的值列表。其中的值可以是各种类型。

1、创建空的Json数组

 QJsonArray();

2、添加数据

 void prepend(const QJsonValue &value);
 void append(const QJsonValue &value); 

 void insert(int i, const QJsonValue &value);

 void push_back(const QJsonValue &t) { append(t); }
 void push_front(const QJsonValue &t) { prepend(t); }

3、移除数据

 void removeAt(int i);
 QJsonValue takeAt(int i);
 void removeFirst();
 void removeLast();

 void pop_front();
 void pop_back();

4、获取元素

 QJsonValue at(int i) const;
 QJsonValue first() const;
 QJsonValue last() const; 

 QJsonValue operator[](int i) const;

5、获取数组中元素个数

  int size() const;
  int count() const;


http://www.kler.cn/a/578974.html

相关文章:

  • unity console日志双击响应事件扩展
  • SQL 简介
  • 【基础5】归并排序
  • SQL SELECT DISTINCT 语句
  • Python3 与 VSCode:深度对比分析
  • 【Git】linux搭建Gitea配置mysql数据库
  • android edittext 防止输入多个小数点或负号
  • 【Elasticsearch入门到落地】9、hotel数据结构分析
  • LeetCode 2523. Closest Prime Numbers in Range(2025/3/7每日一题)
  • 中小企业Windows双因素认证的“轻量化”安全解决方案
  • 探索数据仓库自动化:ETL流程设计与实践
  • qt 播放pcm音频
  • 【模板】树算法之LCA(最近公共祖先)
  • Shell编程概述与Shell变量
  • 物联网中设备异构的问题-甚至可以用工业数据采集器?
  • C++之序列容器(vector,list,dueqe)
  • 在运维工作中,Lvs、nginx、haproxy工作原理分别是什么?
  • 【TI】如何更改 CCS20.1.0 的 WORKSPACE 默认路径
  • 开发环境搭建-05.后端环境搭建-前后端联调-通过断点调试熟悉项目代码特点
  • Hot 3D 人体姿态估计 HPE Demo复现过程