Qt中QJsonObject类

66 篇文章 10 订阅
36 篇文章 13 订阅

00. 目录
01. QJsonObject类简介
02. 公有类型
03. 公有成员方法
04. 公有成员方法解析
05. 参考示例
06. 附录
01. QJsonObject类简介
Header:    #include <QJsonObject> 
qmake:    QT += core
Since:    Qt 5.0

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

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

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

02. 公有类型
class    const_iterator
class    iterator
typedef    ConstIterator
typedef    Iterator
typedef    key_type
typedef    mapped_type
typedef    size_type

03. 公有成员方法
QJsonObject()
QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args)
QJsonObject(const QJsonObject &other)
QJsonObject(QJsonObject &&other)
~QJsonObject()
QJsonObject::iterator    begin()
QJsonObject::const_iterator    begin() const
QJsonObject::const_iterator    constBegin() const
QJsonObject::const_iterator    constEnd() const
QJsonObject::const_iterator    constFind(const QString &key) const
QJsonObject::const_iterator    constFind(QLatin1String key) const
bool    contains(const QString &key) const
bool    contains(QLatin1String key) const
int    count() const
bool    empty() const
QJsonObject::iterator    end()
QJsonObject::const_iterator    end() const
QJsonObject::iterator    erase(QJsonObject::iterator it)
QJsonObject::iterator    find(const QString &key)
QJsonObject::iterator    find(QLatin1String key)
QJsonObject::const_iterator    find(const QString &key) const
QJsonObject::const_iterator    find(QLatin1String key) const
QJsonObject::iterator    insert(const QString &key, const QJsonValue &value)
bool    isEmpty() const
QStringList    keys() const
int    length() const
void    remove(const QString &key)
int    size() const
void    swap(QJsonObject &other)
QJsonValue    take(const QString &key)
QVariantHash    toVariantHash() const
QVariantMap    toVariantMap() const
QJsonValue    value(const QString &key) const
QJsonValue    value(QLatin1String key) const
bool    operator!=(const QJsonObject &other) const
QJsonObject &    operator=(const QJsonObject &other)
QJsonObject &    operator=(QJsonObject &&other)
bool    operator==(const QJsonObject &other) const
QJsonValue    operator[](const QString &key) const
QJsonValue    operator[](QLatin1String key) const
QJsonValueRef    operator[](const QString &key)
QJsonValueRef    operator[](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,返回true

int QJsonObject::size() const
int QJsonObject::count() const
返回JSON对象中键值对的数量

bool QJsonObject::empty() const
bool QJsonObject::isEmpty() const
如果JSON对象为空,返回true

iterator 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对象中的key

QJsonValue QJsonObject::take(const QString &key)
删除JSON对象中的键key,返回key对应的QJsonValue

QVariantHash QJsonObject::toVariantHash() const
将JSON对象转换为QVariantHash

QVariantMap QJsonObject::toVariantMap() const
将JSON对象转换为QVariantMap

QJsonValue 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;
            }
        }
    }
}
/*****************************************************

Qt中使用Json

Qt中使用Json需要一下几个类:

QJsonValue            代表了json格式中的一个值

QJsonObject          代表了json格式的一个对象

QJsonArray            代表了json格式中的数组

QJsonDocument    用来读写json文件

QJsonParseError   用来表示json分析过程的错误

其中QJsonValue支持6中基本的数据类型:

下面例子表示了json的创建、读取、序列化和反序列化的过程。

其中使用QJsonDocument  可以用来序列化和反序列化的过程,进而实现文件读写、socket的读写。

序列化json的函数:

QByteArray toBinaryData()   

QByteArray toJson(JsonFormat format = Indented)

反序列化:

QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate)  

QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)  

QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate) 

QJsonDocument fromVariant(const QVariant &variant)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

#include <QCoreApplication>

#include <QDebug>

#include <QJsonObject>

#include <QFile>

#include <QJsonDocument>

int main(int argc, char *argv[])

{

    QCoreApplication a(argc, argv);

    QJsonObject obj;

    obj.insert("name""lily");

    obj.insert("age", 23);

    QJsonObject addr;

    addr.insert("city""guangzhou");

    addr.insert("province""guangdong");

    obj.insert("addr", addr);

    qDebug() << obj<<endl;

    qDebug()<<obj.value("name").toString()<<endl;

    //序列化

    QJsonDocument jsonDoc(obj);

    QByteArray ba = jsonDoc.toJson();

    //反序列化

    QJsonParseError e;

    QJsonDocument jsonDocNew = QJsonDocument::fromJson(ba, &e);

    if(e.error == QJsonParseError::NoError && !jsonDocNew.isNull())

    {

        QJsonObject getObj = jsonDocNew.object();

        qDebug() << getObj<<endl;

    }

    return a.exec();

}

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值