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