00. 目录
01. QJsonObject类简介
02. 公有类型
03. 公有成员方法
04. 公有成员方法解析
05. 参考示例
06. 附录
01. QJsonObject类简介
Header: #include
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
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
使用键值对链表构建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 |
|