QJsonValue类
QJsonValue类封装了JSON中的值。 更多...
头文件 | #include <QJsonValue> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
- 所有成员列表,包括继承成员
- QJsonValue是Qt中JSON支持的一部分(Qt中的JSON支持)和隐式共享类(隐式共享类)。
注意:本类中所有函数均可重入。
公共类型
枚举 | 类型 { 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() | |
bool | isArray() const |
bool | isBool() const |
bool | isDouble() const |
bool | isNull() const |
bool | isObject() const |
bool | isString() const |
bool | isUndefined() const |
void | swap(QJsonValue &other) |
QJsonArray | toArray(const QJsonArray &defaultValue) const |
QJsonArray | toArray() const |
bool | toBool(bool defaultValue = false) const |
double | toDouble(double defaultValue = 0) const |
int | toInt(int defaultValue = 0) const |
(since 6.0) qint64 | toInteger(qint64 defaultValue = 0) const |
QJsonObject | toObject(const QJsonObject &defaultValue) const |
QJsonObject | toObject() const |
QString | toString() const |
QString | toString(const QString &defaultValue) const |
QVariant | toVariant() const |
QJsonValue::Type | type() const |
bool | operator!=(const QJsonValue &other) const |
QJsonValue & | operator=(const QJsonValue &other) |
QJsonValue & | operator=(QJsonValue &&other) |
bool | operator==(const QJsonValue &other) const |
const QJsonValue | operator[](const QString &key) const |
const QJsonValue | operator[](QStringView key) const |
const QJsonValue | operator[](QLatin1StringView key) const |
const QJsonValue | operator[](qsizetype i) const |
静态公共成员
QJsonValue | fromVariant(const QVariant &variant) |
详细描述
JSON中的值可以是6种基本类型之一
JSON是一种存储结构化数据的格式。它有6种基本数据类型
- bool QJsonValue::Bool
- double QJsonValue::Double
- string QJsonValue::String
- array QJsonValue::Array
- object QJsonValue::Object
- null QJsonValue::Null
值可以表示上述任何数据类型。此外,QJsonValue有一个特殊标志来表示未定义的值。这可以通过isUndefined()查询。
值的类型可以通过type()或类似的isBool()、isString()访问器等方法查询。同样,可以使用toBool()、toString()等方法将值转换为存储的类型。
值在内部是严格类型的,与QVariant不同,不会尝试进行任何隐式类型转换。这意味着将值转换为未存储在其中的类型将返回默认构造的返回值。
QJsonValueRef
QJsonValueRef是QJsonArray和QJsonObject的辅助类。当你获取一个类型为QJsonValueRef的对象时,你可以把它当作一个指向QJsonValue的引用来使用。如果你赋值给它,赋值将应用于从QJsonArray或QJsonObject中获取的引用中的元素。
以下方法返回QJsonValueRef
- QJsonArray::operator[](qsizetype i)
- QJsonObject::operator[](const QString & key) const
另请参阅Qt中的JSON支持和保存和加载游戏。
成员类型文档
枚举 QJsonValue::Type
此枚举描述了JSON值的类型。
常量 | 值 | 描述 |
---|---|---|
QJsonValue::Null | 0x0 | 一个Null值 |
QJsonValue::Bool | 0x1 | 一个布尔值。使用toBool()方法将其转换为布尔值。 |
QJsonValue::Double | 0x2 | 一个数值。使用toDouble()方法将其转换为double类型,或使用toInteger()方法将其转换为qint64类型。 |
QJsonValue::String | 0x3 | 一个字符串。使用toString()方法将其转换为QString。 |
QJsonValue::Array | 0x4 | 一个数组。使用toArray()方法将其转换为QJsonArray。 |
QJsonValue::Object | 0x5 | 一个对象。使用toObject()方法将其转换为QJsonObject。 |
QJsonValue::Undefined | 0x80 | 值未定义。这通常在尝试在数组中读取越界值或在对象中读取不存在的键时作为错误条件返回。 |
成员函数文档
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
源类型 | 目标类型 |
---|---|
QJsonValue::Null | |
QJsonValue::Bool | |
QJsonValue::Double | |
QJsonValue::String | |
QJsonValue::Array | |
QJsonValue::Object | |
QJsonValue::String. 转换将使用 QUrl::toString() 与 QUrl::FullyEncoded 标志,以确保在解析 URL 时最大兼容性 | |
QJsonValue::String. 自 Qt 5.11 以来,生成的字符串将不包括大括号 | |
Whichever type QCborValue::toJsonValue() returns. | |
QJsonValue::Array. 参见 QCborValue::toJsonValue() 了解转换限制。 | |
QJsonValue::Map. 参见 QCborValue::toJsonValue() 了解转换限制和映射键的"字符串化"。 |
信息丢失和其他类型
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::Double 或 QMetaType::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,则返回的QJsonValue是QJsonValue::Undefined。
另请参阅QJsonValue、QJsonValue::isUndefined和QJsonObject.
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,则返回的QJsonValue是QJsonValue::Undefined。
© 2024 The Qt Company Ltd. 本文档中包含的贡献文档的所有权归其各自所有者。此处提供的文档根据自由软件基金会发布的条款,受 GNU Free Documentation License version 1.3 许可。Qt 及其相关标志为 Finland 和/或其他国家/地区的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。