【Qt】Qt中QJsonArray类

00. 目录

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 参考:官方文档

© 版权声明
THE END
喜欢就支持一下吧
点赞201 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容