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