【Qt】Qt中QJsonObject类

00. 目录

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;
            }
        }
    }
}

06. 附录

官方参考文档

QJsonObjectQt框架提供的一个,用于表示JSON对象。它可以用于创建、修改和解析JSON数据。QJsonObject可以插入键值对,并通过键来访问对应的值。 在引用中,代码示例展示了如何使用QJsonObject的一些方法。首先创建了一个空的QJsonObject对象,然后通过insert方法插入了三个键值对。这样就构建了一个包含三个属性的JSON对象。最后,通过QJsonDocument将QJsonObject转化为JSON文档,并可以将其存储为字符串或字节数组。 在引用中,也展示了通过QJsonDocument解析JSON对象的方法。首先将JSON文档转化为QJsonDocument对象,然后可以通过QJsonObject的contains方法判断JSON对象中是否包含指定的键,再通过value方法获取对应的值。根据值的型,可以使用不同的方法进行获取和转换。 总结来说,QJsonObjectQt提供的用于表示JSON对象,可以用于创建、修改和解析JSON数据。可以通过insert方法插入键值对,并通过value方法获取对应的值。同时,也可以通过QJsonDocument将JSON对象转化为字符串或字节数组。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [QJsonObject的使用示例](https://blog.csdn.net/ligare/article/details/125393450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沧海一笑-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值