【Qt】Qt中QJsonArray类

01. QJsonArray类简介

​ QJsonArray封装了JSON数组。

​ JSON数组是值的链表,可以插入和删除QJsonValue。

​ QJsonArray与QVariantList可以相互转换。QJsonArray可以用size(), insert(), removeAt()进行操作,还可以用标准C++的迭代器模式来迭代其内容。

​ QJsonArray是一个隐式共享的类,只要没有被改变,可以和创建QJsonArray的document共享数据。
通过QJsonDocument可以将一个QJsonArray转换成或转换自一个文本形式的JSON。

Header:	#include <QJsonArray> 
qmake:	QT += core
Since:	Qt 5.0

02. QJsonArray成员方法

QJsonArray()
QJsonArray(std::initializer_list<QJsonValue> args)
QJsonArray(const QJsonArray &other)
QJsonArray(QJsonArray &&other)
~QJsonArray()
void	append(const QJsonValue &value)
QJsonValue	at(int i) const
QJsonArray::iterator	begin()
QJsonArray::const_iterator	begin() const
QJsonArray::const_iterator	constBegin() const
QJsonArray::const_iterator	constEnd() const
bool	contains(const QJsonValue &value) const
int	count() const
bool	empty() const
QJsonArray::iterator	end()
QJsonArray::const_iterator	end() const
QJsonArray::iterator	erase(QJsonArray::iterator it)
QJsonValue	first() const
void	insert(int i, const QJsonValue &value)
QJsonArray::iterator	insert(QJsonArray::iterator before, const QJsonValue &value)
bool	isEmpty() const
QJsonValue	last() const
void	pop_back()
void	pop_front()
void	prepend(const QJsonValue &value)
void	push_back(const QJsonValue &value)
void	push_front(const QJsonValue &value)
void	removeAt(int i)
void	removeFirst()
void	removeLast()
void	replace(int i, const QJsonValue &value)
int	size() const
void	swap(QJsonArray &other)
QJsonValue	takeAt(int i)
QVariantList	toVariantList() const
bool	operator!=(const QJsonArray &other) const
QJsonArray	operator+(const QJsonValue &value) const
QJsonArray &	operator+=(const QJsonValue &value)
QJsonArray &	operator<<(const QJsonValue &value)
QJsonArray &	operator=(const QJsonArray &other)
QJsonArray &	operator=(QJsonArray &&other)
bool	operator==(const QJsonArray &other) const
QJsonValueRef	operator[](int i)
QJsonValue	operator[](int i) const

03. QJsonArray成员方法解析

QJsonArray::QJsonArray(std::initializer_list<QJsonValue> args)
构建一个QJsonArray

QJsonArray::QJsonArray(const QJsonArray &other)

void QJsonArray::append(const QJsonValue &value)
在QJsonArray尾部插入value

QJsonValue QJsonArray::at(int i) const
返回QJsonArray中索引为i的QJsonValue值

iterator QJsonArray::begin()
const_iterator QJsonArray::begin() const
返回指向数组第一个元素的STL风格迭代器

const_iterator QJsonArray::constBegin() const
返回指向数组第一个元素的const STL风格迭代器

const_iterator QJsonArray::constEnd() const
返回指向数组最后一个元素后的位置的const STL风格迭代器

bool QJsonArray::contains(const QJsonValue &value) const
如果数组中包含value,返回true

int QJsonArray::count() const
返回数组的大小

bool QJsonArray::empty() const
如果数组为空,返回true

const_iterator QJsonArray::end() const
返回指向数组最后一个元素后的位置的STL风格迭代器

iterator QJsonArray::erase(iterator it)
删除迭代器it指向的元素,返回指向下一个元素的迭代器

QJsonValue QJsonArray::first() const
返回数组中的第一个值

[static] QJsonArray QJsonArray::fromStringList(const QStringList &list)
将一个字符串链表list转换为QJsonArray

[static] QJsonArray QJsonArray::fromVariantList(const QVariantList &list)
将链表list转换为QJsonArray

04. 参考示例

4.1 Json数组的生成

#include <QCoreApplication>
#include <QJsonValue>
#include <QJsonArray>
#include <QJsonDocument>
#include <QByteArray>
#include <QDebug>

#include <iostream>

using namespace  std;


//Json数组生成   [10, "hello itcast", 3.1415, "Qt"]
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //定义一个Json数组
    QJsonArray array;

    //向Json数组中追加数据
    array.append(QJsonValue(10));
    array.append(QJsonValue("hello itcast"));
    array.append(QJsonValue(3.1415));
    array.append(QJsonValue("Qt"));

    //转为Json文档
    QJsonDocument doc(array);

    //转化为字节数组
    //QByteArray arr = doc.toJson(QJsonDocument::Compact);
    QByteArray arr = doc.toJson();
    qDebug().noquote() << arr;
    qDebug() << arr;

    cout << arr.toStdString();

    return a.exec();
}

4.2 Json数组生成和解析

#include <QCoreApplication>
#include <QJsonValue>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonParseError>

#include <QDebug>


//Json数组生成和解析
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //[13, "itcast", 3.1415, true]

    //定义Json数组对象
    QJsonArray array;
    array.append(13);
    array.append("itcast");
    array.append(3.1415);
    array.append(true);

    //Json文档
    QJsonDocument doc(array);

    //转化为字节
    QByteArray arr = doc.toJson();
    qDebug().noquote() << arr;

    qDebug() << "===============================";
    QJsonParseError err;
    QJsonDocument doc1 = QJsonDocument::fromJson(arr, &err);
    if (doc1.isNull() || err.error != QJsonParseError::NoError)
    {
        qDebug() <<"Json解析出错";
        return 1;
    }

    //判断是否为Json数组
    if (!doc1.isArray())
    {
        qDebug() << "非法的Json数组";
        return 1;
    }

    //通过文档获取Json数组
    QJsonArray arr1 = doc1.array();

    #if 0
    for (int i = 0; i < arr1.count(); i++)
    {
        QJsonValue value = arr1.at(i);

        //根据对应的类型解析
        switch(value.type())
        {
        case QJsonValue::Bool:
            qDebug() << value.toBool();
            break;

        case QJsonValue::Double:
            qDebug() << value.toDouble();
            break;

        case QJsonValue::String:
            qDebug() << value.toString();
            break;

        case QJsonValue::Null:
            qDebug() << " ";
            break;

        case QJsonValue::Array:
            //转化为数组
            qDebug() << value.toArray();
            break;

        case QJsonValue::Object:
            qDebug() << value.toObject();
            break;

        default:
            qDebug() << "未知类型";

        }
    }
    #else
        qDebug() << arr1.at(0).toInt();
        qDebug() << arr1.at(1).toString();
        qDebug() << arr1.at(2).toDouble();
        qDebug() << arr1.at(3).toBool();



    #endif



    return a.exec();
}

05. 附录

5.1 参考:官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/714308.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ByteTrack

1. 论文中伪代码表示的流程图 2. 简要版 此图源自&#xff1a; ByteTrack多目标跟踪原理&#xff0c;白老师人工智能学堂 3. 详细版 根据ByteTrack-CPP-ncnn代码的数据流画的较为详细的流程图&#xff1a; 4. ByteTrack-CPP-ncnn的UML类图 Reference ByteTrack多目标跟踪原…

Qt状态机框架

概述 状态机框架提供了用于创建和执行状态图的类。这些概念和符号基于Harel的Statecharts:复杂系统的可视化形式(http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf)&#xff0c;也是UML状态图的基础。状态机执行的语义基于状态图XML (SCXML)(http://…

消息队列-分布式消息队列技术选型

Kafka Kafka 是 LinkedIn 开源的一个分布式流式处理平台&#xff0c;已经成为 Apache 顶级项目&#xff0c;早期被用来用于处理海量的日志&#xff0c;后面才慢慢发展成了一款功能全面的高性能消息队列。 流式处理平台具有三个关键功能&#xff1a; 消息队列&#xff1a;发布和…

SQLServer使用 PIVOT 和 UNPIVOT行列转换

在SQL Server中&#xff0c;PIVOT是一个用于将行数据转换为列数据的操作。它特别适用于将多个行中的值转换为多个列的情况&#xff0c;并在此过程中执行聚合操作。以下是关于SQL Server中PIVOT操作的详细解释和示例&#xff1a; 1、本文内容 概述语法备注关键点简单 PIVOT 示…

Linux命令2

文章目录 移动文件或目录mv格式 查找命令/文件存放位目录置which格式 查找文件或目录find格式查找类型多个查找条件逻辑运算符 移动文件或目录 mv 将文件或者目录移动到指定的位置 如果目标的位置和源位置相同&#xff0c;相当于改名操作 跨目录移动相当于window的剪切 格式…

MacOS之解决:开盖启动问题(七十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

2024.6.16周报

目录 摘要 ABSTRACT 一、文献阅读 一、题目 二、摘要 三、创新点 四、模型架构 五、文章解读 1、Introduction 2、实验 3、结论 二、代码复现 1、模型代码 2、实验结果 三、总结 摘要 本周我阅读了一篇题目为《Contaminant Transport Modeling and Source Att…

工厂方法模式实战之某商场一次促销活动

目录 1.5.1、前言1.5.2、实战场景简介1.5.3、开发环境1.5.4、用传统的if-else语句实现1.5.4.1、工程结构1.5.4.2、if-else需求实现1.5.4.3、测试验证 1.5.5、工厂模式优化代码1.5.5.1、工程结构1.5.5.2、代码实现1.5.5.2.1、定义各种商品发放接口及接口实现1.5.5.2.2、定义工厂…

项目经理,请勇敢Say No~

为什么要say no&#xff1f; 培养say no的勇气 优雅的say no&#xff01; say no 三部曲&#xff0c;项目经理&#xff0c;你准备好了吗&#xff1f; 为什么要say no&#xff1f; 保护项目完整性的屏障 项目管理的核心在于平衡时间、成本与质量三大要素&#xff0c;任何一项的…

STL——set、map、multiset、multimap的介绍及使用

文章目录 关联式容器键值对树形结构与哈希结构setset的介绍set的使用set的模板参数列表set的构造set的使用set的迭代器使用演示 multisetmultiset演示 mapmap的定义方式map的插入map的查找map的[ ]运算符重载map的迭代器遍历multimapmultimap的介绍multimap的使用 在OJ中的使用…

全球“抱团”美股,美股“抱团”AI

内容提要 过去一个月内&#xff0c;全球约有300亿美元新资金流入股票基金&#xff0c;其中高达94%投向了美国资产&#xff1b;一季度&#xff0c;海外投资者购入了1870亿美元美国公司债券&#xff0c;同比增长61%。 文章正文 尽管美国面临债务问题和大选带来的政治分歧&#…

索引-定义、创建(CREATE INDEX)、删除(DROP INDEX)

一、概述 1、索引是SQL语言定义的一种数据对象&#xff0c;是大多数DBMS为数据库中基本表创建的一种辅助存取结构&#xff0c;用于响应特定查询条件进行查询时的查询速度&#xff0c;DBMS根据查询条件从数据库文件中&#xff0c;选择出一条或者多条数据记录以供检索&#xff0…

【JS重点17】原型继承

目录 一&#xff1a;什么是原型继承 二&#xff1a;通过赋值方式实现原型继承 三&#xff1a;通过构造函数实现原型继承 四&#xff1a;如何赚钱 一&#xff1a;什么是原型继承 通过往构造函数上的原型对象添加属性和方法&#xff0c;再new一个实例对象&#xff0c;从而实例…

18. 第十八章 继承

18. 继承 和面向对象编程最常相关的语言特性就是继承(inheritance). 继承值得是根据一个现有的类型, 定义一个修改版本的新类的能力. 本章中我会使用几个类来表达扑克牌, 牌组以及扑克牌性, 用于展示继承特性.如果你不玩扑克, 可以在http://wikipedia.org/wiki/Poker里阅读相关…

CSS期末复习速览(二)

1.元素显示模式分为三种&#xff1a;块元素&#xff0c;行内元素&#xff0c;行内块元素 2.块元素&#xff1a;常见的块元素&#xff1a;<h1>~<h6> <p> <div> <ul> <ol> <li>&#xff0c;特点&#xff1a;自己独占一行&a…

需求:如何给文件添加水印

今天给大家介绍一个简单易用的水印添加框架&#xff0c;框架抽象了各个文件类型的对于水印添加的方法。仅使用几行代码即可为不同类型的文件添加相同样式的水印。 如果你有给PDF、图片添加水印的需求&#xff0c;EasyWatermark是一个很好的选择&#xff0c;主要功能就是传入一…

嵌入式实训day5

1、 from machine import Pin import time # 定义按键引脚控制对象 key1 Pin(27,Pin.IN, Pin.PULL UP) key2 Pin(26,Pin.IN, Pin.PULL UP)led1 Pin(15,Pin.ouT, value0) led2 Pin(2,Pin.ouT, value0) led3 Pin(0,Pin.ouT, value0) # 定义key1按键中断处理函数 def key1 ir…

2.线上论坛项目

一、项目介绍 线上论坛 相关技术&#xff1a;SpringBootSpringMvcMybatisMysqlSwagger项目简介&#xff1a;本项目是一个功能丰富的线上论坛&#xff0c;用户可编辑、发布、删除帖子&#xff0c;并评论、点赞。帖子按版块分类&#xff0c;方便查找。同时&#xff0c;用户可以…

【CT】LeetCode手撕—121. 买卖股票的最佳时机

目录 题目1- 思路2- 实现⭐121. 买卖股票的最佳时机——题解思路 2- ACM实现 题目 原题连接&#xff1a;121. 买卖股票的最佳时机 1- 思路 模式识别 模式1&#xff1a;只能某一天买入 ——> 买卖一次 ——> dp 一次的最大利润 动规五部曲 1.定义dp数组&#xff0c;确…

跻身中国市场前三,联想服务器的“智变”与“质变”

IDC发布的《2024年第一季度中国x86服务器市场报告》显示&#xff0c;联想服务销售额同比增长200.2%&#xff0c;在前十厂商中同比增速第一&#xff0c;并跻身中国市场前三&#xff0c;迈入算力基础设施“第一阵营”。 十年砺剑联想梦&#xff0c;三甲登榜领风骚。探究联想服务器…