QJsonValue类

QJsonValue类封装了JSON中的值。 更多...

头文件 #include <QJsonValue>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意:本类中所有函数均可重入

公共类型

枚举类型 { Null, Bool, Double, String, Array, …, Undefined }

公共函数

QJsonValue(QJsonValue::Type type = Null)
QJsonValue(bool b)
QJsonValue(double v)
QJsonValue(int v)
QJsonValue(qint64 v)
QJsonValue(const QString &s)
QJsonValue(QLatin1StringView s)
QJsonValue(const char *s)
QJsonValue(const QJsonArray &a)
(since 6.3) QJsonValue(QJsonArray &&a)
QJsonValue(const QJsonObject &o)
(since 6.3) QJsonValue(QJsonObject &&o)
QJsonValue(const QJsonValue &other)
QJsonValue(QJsonValue &&other)
~QJsonValue()
boolisArray() const
boolisBool() const
boolisDouble() const
boolisNull() const
boolisObject() const
boolisString() const
boolisUndefined() const
voidswap(QJsonValue &other)
QJsonArraytoArray(const QJsonArray &defaultValue) const
QJsonArraytoArray() const
booltoBool(bool defaultValue = false) const
doubletoDouble(double defaultValue = 0) const
inttoInt(int defaultValue = 0) const
(since 6.0) qint64toInteger(qint64 defaultValue = 0) const
QJsonObjecttoObject(const QJsonObject &defaultValue) const
QJsonObjecttoObject() const
QStringtoString() const
QStringtoString(const QString &defaultValue) const
QVarianttoVariant() const
QJsonValue::Typetype() const
booloperator!=(const QJsonValue &other) const
QJsonValue &operator=(const QJsonValue &other)
QJsonValue &operator=(QJsonValue &&other)
booloperator==(const QJsonValue &other) const
const QJsonValueoperator[](const QString &key) const
const QJsonValueoperator[](QStringView key) const
const QJsonValueoperator[](QLatin1StringView key) const
const QJsonValueoperator[](qsizetype i) const

静态公共成员

QJsonValuefromVariant(const QVariant &variant)

详细描述

JSON中的值可以是6种基本类型之一

JSON是一种存储结构化数据的格式。它有6种基本数据类型

值可以表示上述任何数据类型。此外,QJsonValue有一个特殊标志来表示未定义的值。这可以通过isUndefined()查询。

值的类型可以通过type()或类似的isBool()、isString()访问器等方法查询。同样,可以使用toBool()、toString()等方法将值转换为存储的类型。

值在内部是严格类型的,与QVariant不同,不会尝试进行任何隐式类型转换。这意味着将值转换为未存储在其中的类型将返回默认构造的返回值。

QJsonValueRef

QJsonValueRefQJsonArrayQJsonObject的辅助类。当你获取一个类型为QJsonValueRef的对象时,你可以把它当作一个指向QJsonValue的引用来使用。如果你赋值给它,赋值将应用于从QJsonArrayQJsonObject中获取的引用中的元素。

以下方法返回QJsonValueRef

另请参阅Qt中的JSON支持保存和加载游戏

成员类型文档

枚举 QJsonValue::Type

此枚举描述了JSON值的类型。

常量描述
QJsonValue::Null0x0一个Null值
QJsonValue::Bool0x1一个布尔值。使用toBool()方法将其转换为布尔值。
QJsonValue::Double0x2一个数值。使用toDouble()方法将其转换为double类型,或使用toInteger()方法将其转换为qint64类型。
QJsonValue::String0x3一个字符串。使用toString()方法将其转换为QString。
QJsonValue::Array0x4一个数组。使用toArray()方法将其转换为QJsonArray。
QJsonValue::Object0x5一个对象。使用toObject()方法将其转换为QJsonObject。
QJsonValue::Undefined0x80值未定义。这通常在尝试在数组中读取越界值或在对象中读取不存在的键时作为错误条件返回。

成员函数文档

QJsonValue::QJsonValue(QJsonValue::Type type = Null)

创建类型为type的QJsonValue。

默认值是创建一个Null值。

QJsonValue::QJsonValue(bool b)

创建一个布尔类型的值,值为b。

QJsonValue::QJsonValue(double v)

创建一个数值类型的值,值为v。

QJsonValue::QJsonValue(int v)

这是一个重载函数。

创建一个数值类型的值,值为v。

QJsonValue::QJsonValue(qint64 v)

这是一个重载函数。

创建一个数值类型的值,值为v。注意:IEEE 754双精度数值的整数限制为2^53(-9007199254740992到+9007199254740992)。如果您传入超出此范围的值,则可能会发生精度损失。

QJsonValue::QJsonValue(const QString &s)

创建一个字符串类型的值,值为s。

QJsonValue::QJsonValue(QLatin1StringView s)

创建一个字符串类型的值,值为s,其中s由Latin-1字符串视图组成。

QJsonValue::QJsonValue(const char *s)

创建一个字符串类型的值,值为s,假设输入编码为UTF-8。

您可以通过在编译应用程序时定义QT_NO_CAST_FROM_ASCII来禁用此构造函数。

QJsonValue::QJsonValue(const QJsonArray &a)

创建一个数组类型的值,值为a。

[noexcept, since 6.3] QJsonValue::QJsonValue(QJsonArray &&a)

这是一个重载函数。

此函数是在Qt 6.3中引入的。

QJsonValue::QJsonValue(const QJsonObject &o)

创建一个 Object 类型值,其值为 o

[noexcept, since 6.3] QJsonValue::QJsonValue(QJsonObject &&o)

这是一个重载函数。

此函数是在Qt 6.3中引入的。

[noexcept] QJsonValue::QJsonValue(const QJsonValue &other)

创建 other 的副本。

[noexcept] QJsonValue::QJsonValue(QJsonValue &&other)

other 处移动构造 QJsonValue。

[noexcept] QJsonValue::~QJsonValue()

销毁值。

[static] QJsonValue QJsonValue::fromVariant(const QVariant &variant)

variant 转换为 QJsonValue 并返回。

转换将按照以下方式将 QVariant 类型转换为 QJsonValue

信息丢失和其他类型

QVariant 可以携带JSON表示不了的信息。如果 QVariant 不属于上述类型之一,转换不可保证,并且可能在Qt未来的版本中发生变化,如同UUID所做的那样。代码应尽量避免使用上述之外的其他类型。

如果 QVariant::isNull() 返回 true,无论携带 QVariant 的类型如何,都会返回一个空的 QJsonValue 或将其插入列表或对象中。注意Qt 6.0中行为更改的影响,也影响了此函数。

如果是一个浮点数,且值为无穷大或NaN,则会被转换为JSON的null值。自Qt 6.0以来,QJsonValue 可以无损地存储任何64位有符号整数的完整精度,但在之前的版本中,±2^53范围之外的值可能会丢失精度。无符号64位值大于或等于2^63将会丢失精度或别名到负值,因此应避免使用 QMetaType::ULongLong

对于上述未列出的其他类型,将尝试进行类型转换为字符串,通常是通过调用 QVariant::toString() 来实现的。如果转换失败,则将值替换为null JSON值。请注意,QVariant::toString() 对大多数类型来说也具有损耗性。例如,如果传入的 QVariant 表示原始的字节数组数据,建议预先将其编码为 Base64(或另一种无损编码),否则将使用具有损耗性的转换 QString::fromUtf8()。

请注意,通过 QVariant::toString() 进行的转换可能会随时更改。QVariant 和 QJsonValue 可能在将来扩展以支持更多类型,这将导致此函数进行转换的方式发生变化。

另请参阅toVariant() 和 QCborValue::fromVariant

bool QJsonValue::isArray() const

如果值包含一个数组,则返回 true

另请参阅toArray

bool QJsonValue::isBool() const

如果值包含一个布尔值,则返回 true

另请参阅toBool

bool QJsonValue::isDouble() const

如果值包含一个双精度浮点数,则返回 true

另请参阅toDouble

bool QJsonValue::isNull() const

如果值是null,则返回 true

bool QJsonValue::isObject() const

如果值包含一个对象,则返回 true

另请参阅toObject

bool QJsonValue::isString() const

如果值包含一个字符串,则返回 true

另请参阅toString

bool QJsonValue::isUndefined() const

如果值是未定义的,则返回 true。这可能在某些错误情况下发生,例如在访问一个不存在的 QJsonObject 中的键时。

[noexcept] void QJsonValue::swap(QJsonValue &other)

将值 other 与此值交换。此操作非常快且从不失败。

QJsonArray QJsonValue::toArray(const QJsonArray &defaultValue) const

将值转换为数组并返回。

如果 type() 不是数组,则返回 defaultValue

QJsonArray QJsonValue::toArray() const

这是一个重载函数。

将值转换为数组并返回。

如果 type() 不是数组,则会返回一个 QJsonArray()。

bool QJsonValue::toBool(bool defaultValue = false) const

将值转换为布尔值并返回它。

如果 type() 不是布尔值,则返回 defaultValue

double QJsonValue::toDouble(double defaultValue = 0) const

将值转换为双精度浮点数并返回。

如果 type() 不是双精度浮点数,则返回 defaultValue

int QJsonValue::toInt(int defaultValue = 0) const

将值转换为整数并返回。

如果 type() 不是整数或者是非整数值,则返回 defaultValue

[自 6.0 开始] qint64 QJsonValue::toInteger(qint64 defaultValue = 0) const

将值转换为整数并返回。

如果 type() 不是整数或者是无法表示为 qint64 的整数,则返回 defaultValue

此函数从 Qt 6.0 开始引入。

QJsonObject QJsonValue::toObject(const QJsonObject &defaultValue) const

将值转换为对象并返回。

如果 type() 不是对象,则返回 defaultValue

QJsonObject QJsonValue::toObject() const

这是一个重载函数。

将值转换为对象并返回。

如果 type() 不是对象,则返回一个空的 QJsonObject

QString QJsonValue::toString() const

将值转换为 QString 并返回。

如果 type() 不是字符串,则返回一个空 QString

另请参阅QString::isNull

QString QJsonValue::toString(const QString &defaultValue) const

将值转换为 QString 并返回。

如果 type() 不是字符串,则返回 defaultValue

QVariant QJsonValue::toVariant() const

将值转换为 QVariant

QJsonValue 类型将按以下方式进行转换

常量描述
空值QMetaType::Nullptr
布尔值QMetaType::Bool
双精度浮点数QMetaType::DoubleQMetaType::LongLong
字符串QString
数组QVariantList
对象QVariantMap
未定义QVariant()

另请参阅fromVariant

QJsonValue::Type QJsonValue::type() const

返回值的类型。

另请参阅QJsonValue::Type.

bool QJsonValue::operator!=(const QJsonValue &other) const

如果值不等于other,则返回true

[noexcept] QJsonValue &QJsonValue::operator=(const QJsonValue &other)

other中存储的值赋给此对象。

[noexcept] QJsonValue &QJsonValue::operator=(QJsonValue &&other)

other移动赋值到本值。

bool QJsonValue::operator==(const QJsonValue &other) const

如果值等于other,则返回true

const QJsonValue QJsonValue::operator[](const QString &key) const

返回代表键key的值的QJsonValue

相当于调用toObject().value(key)。

如果键不存在或isObject()为false,则返回的QJsonValueQJsonValue::Undefined

另请参阅QJsonValueQJsonValue::isUndefinedQJsonObject.

const QJsonValue QJsonValue::operator[](QStringView key) const

这是一个重载函数。

const QJsonValue QJsonValue::operator[](QLatin1StringView key) const

这是一个重载函数。

const QJsonValue QJsonValue::operator[](qsizetype i) const

返回代表索引i的值的QJsonValue

相当于调用toArray().at(i)。

如果i越界或isArray()为false,则返回的QJsonValueQJsonValue::Undefined

另请参阅QJsonValueQJsonValue::isUndefinedQJsonArray.

© 2024 The Qt Company Ltd. 本文档中包含的贡献文档的所有权归其各自所有者。此处提供的文档根据自由软件基金会发布的条款,受 GNU Free Documentation License version 1.3 许可。Qt 及其相关标志为 Finland 和/或其他国家/地区的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。