分享

【Qt】Qt中QJsonObject类

 wuxinit_ 2020-08-25

00. 目录

01. QJsonObject类简介

Header:#include <QJsonObject> qmake:QT += coreSince:Qt 5.0

​QJsonObject类用于封装JSON对象。JSON对象是包含键值对的链表,其中键是唯一的字符串,其值由QJsonValue对象。

​QJsonObject可以与QVariantMap相互转换,可以用size()来获得键值对的数目,insert()、remove()分别用来插入和删除pair。可以用标准C++的迭代器模式(iterator pattern)来迭代其内容。
​ QJsonObject是一个隐式共享的类,只要没有被改变过,QJsonObject会和创建它的document共享数据。

​可以通过QJsonDocument将QJsonObject和文本格式相互转换。

02. 公有类型

classconst_iteratorclassiteratortypedefConstIteratortypedefIteratortypedefkey_typetypedefmapped_typetypedefsize_type

03. 公有成员方法

QJsonObject()QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args)QJsonObject(const QJsonObject &other)QJsonObject(QJsonObject &&other)~QJsonObject()QJsonObject::iteratorbegin()QJsonObject::const_iteratorbegin() constQJsonObject::const_iteratorconstBegin() constQJsonObject::const_iteratorconstEnd() constQJsonObject::const_iteratorconstFind(const QString &key) constQJsonObject::const_iteratorconstFind(QLatin1String key) constboolcontains(const QString &key) constboolcontains(QLatin1String key) constintcount() constboolempty() constQJsonObject::iteratorend()QJsonObject::const_iteratorend() constQJsonObject::iteratorerase(QJsonObject::iterator it)QJsonObject::iteratorfind(const QString &key)QJsonObject::iteratorfind(QLatin1String key)QJsonObject::const_iteratorfind(const QString &key) constQJsonObject::const_iteratorfind(QLatin1String key) constQJsonObject::iteratorinsert(const QString &key, const QJsonValue &value)boolisEmpty() constQStringListkeys() constintlength() constvoidremove(const QString &key)intsize() constvoidswap(QJsonObject &other)QJsonValuetake(const QString &key)QVariantHashtoVariantHash() constQVariantMaptoVariantMap() constQJsonValuevalue(const QString &key) constQJsonValuevalue(QLatin1String key) constbooloperator!=(const QJsonObject &other) constQJsonObject &operator=(const QJsonObject &other)QJsonObject &operator=(QJsonObject &&other)booloperator==(const QJsonObject &other) constQJsonValueoperator[](const QString &key) constQJsonValueoperator[](QLatin1String key) constQJsonValueRefoperator[](const QString &key)QJsonValueRefoperator[](QLatin1String key)

04. 公有成员方法解析

QJsonObject::QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args)使用键值对链表构建QJsonObject对象QJsonObject::QJsonObject(const QJsonObject &other)构建QJsonObject对象 iterator QJsonObject::begin()const_iterator QJsonObject::begin() const返回指向JSON对象的第一个元素的STL风格的迭代器const_iterator QJsonObject::constBegin() const返回指向JSON对象的第一个元素的const STL风格的迭代器const_iterator QJsonObject::constEnd() const返回SJON对象的最后一个元素后的位置的const STL风格的迭代器const_iterator QJsonObject::constFind(const QString &key) const返回一个指向键值对中键为key的元素的const迭代器bool QJsonObject::contains(const QString &key) const如果JSON对象中包含键key,返回trueint QJsonObject::size() constint QJsonObject::count() const返回JSON对象中键值对的数量bool QJsonObject::empty() constbool QJsonObject::isEmpty() const如果JSON对象为空,返回trueiterator QJsonObject::find(const QString &key)const_iterator QJsonObject::find(const QString &key) const返回指向JSON对象中键为key的键值对的迭代器[static] QJsonObject QJsonObject::fromVariantHash(const QVariantHash &hash)将hash转换为JSON对象[static] QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map)将map转换为JSON对象iterator QJsonObject::insert(const QString &key, const QJsonValue &value)插入键为key,值为value的键值对,返回插入键值对的迭代器QStringList QJsonObject::keys() const返回JSON对象的所有键的链表void QJsonObject::remove(const QString &key)删除JSON对象中的keyQJsonValue QJsonObject::take(const QString &key)删除JSON对象中的键key,返回key对应的QJsonValueQVariantHash QJsonObject::toVariantHash() const将JSON对象转换为QVariantHashQVariantMap QJsonObject::toVariantMap() const将JSON对象转换为QVariantMapQJsonValue QJsonObject::value(const QString &key) const返回key对应的QJsonValue值

05. 参考示例

简单的JSON对象

{    "Cross Platform": true,    "From": 1991,    "Name": "Qt"}

生成比较简单,只需要用 QJsonObject 即可。

// 构建 JSON 对象QJsonObject json;json.insert("Name", "Qt");json.insert("From", 1991);json.insert("Cross Platform", true);// 构建 JSON 文档QJsonDocument document;document.setObject(json);QByteArray byteArray = document.toJson(QJsonDocument::Compact);QString strJson(byteArray);qDebug() << strJson;

简单的JSON解析

QJsonParseError jsonError;// 转化为 JSON 文档QJsonDocument doucment = QJsonDocument::fromJson(byteArray, &jsonError); // 解析未发生错误if (!doucment.isNull() && (jsonError.error == QJsonParseError::NoError)) {      if (doucment.isObject())     {         // JSON 文档为对象        QJsonObject object = doucment.object();  // 转化为对象        if (object.contains("Name"))         {  // 包含指定的 key            QJsonValue value = object.value("Name");  // 获取指定 key 对应的 value            if (value.isString())             {  // 判断 value 是否为字符串                QString strName = value.toString();  // 将 value 转化为字符串                qDebug() << "Name : " << strName;            }        }        if (object.contains("From"))         {            QJsonValue value = object.value("From");            if (value.isDouble())             {                int nFrom = value.toVariant().toInt();                qDebug() << "From : " << nFrom;            }        }        if (object.contains("Cross Platform"))         {            QJsonValue value = object.value("Cross Platform");            if (value.isBool())             {                bool bCrossPlatform = value.toBool();                qDebug() << "CrossPlatform : " << bCrossPlatform;            }        }    }}

06. 附录

官方参考文档

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约