PySide6.QtCore.QCborValue¶
- class QCborValue¶
QCborValue
类封装了 CBOR 中的一个值。更多…概要¶
方法¶
def
__init__()
def
compare()
def
isArray()
def
isBool()
def
isByteArray()
def
isContainer()
def
isDateTime()
def
isDouble()
def
isFalse()
def
isInteger()
def
isInvalid()
def
isMap()
def
isNull()
def
isSimpleType()
def
isString()
def
isTag()
def
isTrue()
def
isUndefined()
def
isUrl()
def
isUuid()
def
__ne__()
def
__lt__()
def
__le__()
def
__eq__()
def
__gt__()
def
__ge__()
def
operator[]()
def
swap()
def
tag()
def
taggedValue()
def
toArray()
def
toBool()
def
toByteArray()
def
toCbor()
def
toDateTime()
def
toDouble()
def
toInteger()
def
toJsonValue()
def
toMap()
def
toSimpleType()
def
toString()
def
toUrl()
def
toUuid()
def
toVariant()
def
type()
静态函数¶
def
fromCbor()
def
fromJsonValue()
def
fromVariant()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
该类可用于保存CBOR中可用的多种类型之一。CBOR是简洁二进制对象表示法,是一种非常紧凑的二进制数据编码形式,是JSON的超集。它由IETF受限RESTful环境(CoRE)工作组创建,已在许多新的RFC中使用。它旨在与CoAP协议一起使用。
CBOR 有三组内置类型:
基本类型:整数、浮点数(双精度)、布尔值、空值等。
类似字符串的类型:字符串和字节数组
容器:数组和映射
此外,CBOR通过将“标签”与上述类型之一关联来支持类型扩展性,以传达更多信息。例如,UUID由标签和包含UUID内容的16字节的字节数组表示。
QCborValue
支持直接使用Qt类(如QUuid
)创建和解码这些扩展类型。有关完整列表,请参见
Type
。可以使用type()
或其中一个“isXxxx”函数查询QCborValue
的类型。扩展类型和标记值¶
标记值是一个普通的
QCborValue
,它与一个数字配对,该数字是其标记。有关API中的标记以及完整的官方列表,请参阅QCborKnownTags
。这种组合形成了扩展类型。QCborValue
在API中支持某些扩展类型,例如URL(使用QUrl
)和UUID(使用QUuid
)。API中不支持的其它扩展类型由QCborValue
的Tag
类型表示。标签可以通过tag()
检索,标记的值可以使用taggedValue()
获取。为了支持未来的兼容性,包含扩展Qt类型的QCborValues与相同内容的标签类型比较相等。换句话说,以下表达式为真:
QCborValue(uuid) == QCborValue(QCborKnownTags.Uuid, uuid.toRfc4122())
未定义和空值¶
QCborValue
可以包含一个“null”值,该值不属于任何特定类型。它类似于C++中的std::nullptr_t
类型,其唯一可能的值是None
。QCborValue
有一个接受此类类型的构造函数,并创建一个空的QCborValue
。空值用于表示可选值不存在。在这方面,它类似于C++标准库类型
std::optional
当它未启用时。与C++类型不同,CBOR空值只是“Null”类型,无法确定它替换的具体类型。QCborValue
也可以是未定义类型,表示“未定义”的值。实际上,这是QCborValue
默认构造函数创建的内容。未定义的值与空值不同。虽然空值用于表示未提供的可选值,但未定义通常用于表示无法提供预期值,通常是由于错误或无法满足的前提条件。
这些值是完全有效的,并且可能出现在CBOR流中,与JSON内容和
QJsonValue
的未定义位不同。但像QJsonValue
的Undefined一样,它是由CBOR容器的value()或只读操作符[]返回的,用于无效查找(对于QCborArray
,索引超出范围,或对于QCborMap
,未找到键)。无法将这种情况与Undefined的值区分开来,因此如果需要,请检查QCborArray
的大小并使用QCborMap
的迭代器API。简单类型¶
CBOR支持额外的简单类型,这些类型像Null和Undefined一样,不携带其他值。它们被称为“简单类型”或“简单值”。CBOR将布尔值编码为两种不同的类型(一种用于
true
,另一种用于false
),但QCborValue
为它们提供了一个方便的API。目前没有其他定义的CBOR简单类型。
QCborValue
通过它们的数字支持它们,使用像isSimpleType()
和toSimpleType()
这样的API,以便在Qt API更新之前与未来规范兼容。在此类规范之前不鼓励使用它们,因为其他CBOR实现可能不完全支持它们。CBOR支持¶
QCborValue
支持创建规范化和严格流所需的所有CBOR功能。它实现了RFC 7049中规定的几乎所有功能。下表列出了
QCborValue
支持的CBOR功能。功能
支持
无符号数字
是 (
qint64
范围)负数
是 (
qint64
范围)字节字符串
是
文本字符串
是
分块字符串
见下文
标签
是(任意)
布尔值
是
空值
是
未定义
是
任意简单值
是
半精度浮点数(16位)
是
单精度浮点数(32位)
是
双精度浮点数(64位)
是
无穷大和NaN浮点数
是
定长数组和映射
是
不定长度数组和映射
是
除了字符串和整数之外的映射键类型
是(任意)
QCborValue
中的整数限制在qint64
类型的范围内。即从 -9,223,372,036,854,775,808 (-2 63) 到 9,223,372,036,854,775,807 (2 63 - 1)。CBOR 本身可以表示超出此范围的整数值,但QCborValue
不支持。当使用fromCbor()
解码包含这些值的流时,QCborValue
会自动转换为Double
,但这可能会丢失最多 11 位的精度。fromCbor()
能够解码分块字符串,但总是会将分块合并成一个单一的QCborValue
。因此,在使用toCbor()
时,它总是写入非分块字符串(这也是规范格式所要求的)。QCborValue
将始终将CBOR流中的半精度和单精度浮点值转换为双精度。toCbor()
函数可以接受一个参数,指示是否重新创建它们。QCborValueRef¶
QCborValueRef 是
QCborArray
和QCborMap
的辅助类。它是你在使用这些类中的可变API时得到的类型。与QCborValue
不同,可以给这个类分配新值。当这样做时,它引用的数组或映射将用新值进行修改。在其他所有方面,它的API与QCborValue
相同。{解析和显示CBOR数据}
另请参阅
QCborArray
QCborMap
QCborStreamReader
QCborStreamWriter
QJsonValue
QJsonDocument
序列化转换器 保存和加载游戏- class EncodingOption¶
(继承自
enum.Flag
) 此枚举用于toCbor()
的选项参数中,用于修改编码器的行为。常量
描述
QCborValue.NoTransformation
(默认)不执行任何转换。
QCborValue.UseFloat
告诉编码器尽可能使用IEEE 754单精度浮点数(即
float
)。QCborValue.UseFloat16
告诉编码器尽可能使用IEEE 754半精度浮点数(即
qfloat16
)。隐含UseFloat
。QCborValue.UseIntegers
告诉编码器在
Double
类型的值包含整数时使用整数。使用
UseFloat16
是必需的,以便以规范格式编码流,但在其他情况下并不必要。另请参阅
- class DiagnosticNotationOption¶
(继承自
enum.Flag
) 此枚举用于toDiagnosticNotation()
的选项参数中,以修改输出格式。常量
描述
QCborValue.Compact
不使用任何换行符,生成紧凑的表示形式。
QCborValue.LineWrapped
使用换行符,每行一个
QCborValue
。QCborValue.ExtendedFormat
使用一些不同的选项来表示值,这些选项在RFC 7049中未找到。这些选项可能会发生变化。
目前,
ExtendedFormat
将改变字节数组的表示方式。没有它时,它们总是以十六进制编码且没有空格。有了它,toCbor()
将根据上下文使用带空格的十六进制、base64 或 base64url 编码。
- class Type¶
此枚举表示
QCborValue
类型。它由type()
函数返回。CBOR 内置类型有:
常量
描述
QCborValue.Integer
qint64
: 一个整数值QCborValue.ByteArray
QByteArray
: 一个字节数组(“字节字符串”)QCborValue.String
QString
: 一个Unicode字符串(“文本字符串”)QCborValue.Array
QCborArray
: QCborValues的数组QCborValue.Map
QCborMap
: QCborValues的关联容器QCborValue.SimpleType
QCborSimpleType
: 几种简单类型/值之一QCborValue.False
bool
: 值为false
的简单类型QCborValue.True
bool
: 值为true
的简单类型QCborValue.Null
std::nullptr_t
: 空值的简单类型QCborValue.Undefined
(无类型) 未定义值的简单类型
QCborValue.Double
double
: 双精度浮点数QCborValue.Invalid
不是一个有效的值,这通常表示CBOR解码错误
此外,
QCborValue
可以表示扩展类型:常量
描述
QCborValue.Tag
一个未知或无法识别的扩展类型,由其标签(一个
QCborTag
)和标记值(一个QCborValue
)表示QCborValue.DateTime
QDateTime
: 日期和时间戳QCborValue.Url
QUrl
: 一个URL或URIQCborValue.RegularExpression
QRegularExpression
: 正则表达式的模式QCborValue.Uuid
QUuid
: 一个UUID另请参阅
- __init__()¶
创建一个
QCborValue
类型的Undefined
。CBOR未定义值用于指示缺失的信息,通常是由于之前的操作未按预期完成的结果。它们也被
QCborArray
和QCborMap
API用来指示未找到搜索的项目。未定义的值由
Undefined simple type
表示。因此,具有未定义值的QCborValues也会对isSimpleType()
和isSimpleType(QCborSimpleType::Undefined)
返回true。未定义的值与空值不同。
QCborValue
具有未定义值的对象也与无效的QCborValue
对象不同。API 不会创建无效的 QCborValues,但它们可能由于解析错误而存在。- __init__(st)
- Parameters:
st –
QCborSimpleType
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
创建一个
QCborValue
的简单类型st
。该类型稍后可以使用toSimpleType()
以及isSimpleType
(st)来检索。CBOR简单类型是没有关联值的类型,就像C++的
std::nullptr_t
类型,其唯一可能的值是None
。如果
st
是QCborSimpleType::Null
,生成的QCborValue
将是Null
类型,同样适用于QCborSimpleType::Undefined
。如果st
是QCborSimpleType::False
或QCborSimpleType::True
,创建的QCborValue
将是一个布尔值,分别包含 false 或 true 的值。此函数可用于API中未定义的简单类型。例如,要创建一个具有简单类型12的
QCborValue
,可以编写:value = QCborValue(QCborSimpleType(12))
在简单类型的规范发布之前,不应使用它们,因为其他实现可能无法正确支持它们。简单类型值24到31是保留的,不得使用。
isSimpleType()
,isNull()
,isUndefined()
,isTrue()
,isFalse()
- __init__(t_)
- Parameters:
t –
类型
创建一个类型为
t_
的QCborValue
。与此类型关联的值(如果有)将默认构造。另请参阅
- __init__(s)
- Parameters:
s –
QLatin1String
- __init__(s)
- Parameters:
s – 字符串
创建一个带有字符串值
s
的QCborValue
。该值稍后可以使用toString()
来获取。- __init__(b_)
- Parameters:
b – 布尔值
创建一个带有布尔值
b
的QCborValue
。该值稍后可以使用toBool()
来获取。在内部,CBOR 布尔值由一对类型表示,一个表示 true,一个表示 false。因此,布尔值的 QCborValues 将返回 true 给
isSimpleType()
和isSimpleType(QCborSimpleType::False)
或isSimpleType(QCborSimpleType::True)
中的一个。- __init__(ba)
- Parameters:
ba –
QByteArray
创建一个带有字节数组值
ba
的QCborValue
。稍后可以使用toByteArray()
来检索该值。- __init__(a)
- Parameters:
a –
QCborArray
- __init__(m)
- Parameters:
m –
QCborMap
- __init__(other)
- Parameters:
其他 –
QCborValue
将
other
的内容复制到此对象中。- __init__(dt)
- Parameters:
dt –
QDateTime
创建一个包含由
dt
表示的值的日期/时间扩展类型的QCborValue
对象。该值稍后可以使用toDateTime()
检索。CBOR 日期/时间类型是使用标签的扩展类型:要么是标记为
DateTime
的字符串(ISO 日期格式),要么是标记为UnixTime_t
的数字(自 1970 年开始以来的秒数,UTC)。在解析 CBOR 流时,QCborValue
会将UnixTime_t
转换为基于字符串的类型。- __init__(rx)
- Parameters:
rx –
QRegularExpression
创建一个
QCborValue
对象,该对象属于正则表达式模式扩展类型,并包含由rx
表示的值。该值稍后可以使用toRegularExpression()
来检索。CBOR正则表达式类型是一种扩展类型,由一个标记为
RegularExpression
的字符串表示。请注意,CBOR正则表达式仅存储模式,因此QRegularExpression
对象可能携带的任何标志将会丢失。- __init__(s)
- Parameters:
s – 字符串
创建一个带有字符串值
s
的QCborValue
。该值稍后可以使用toString()
来获取。- __init__(url)
- Parameters:
url –
QUrl
创建一个包含由
url
表示的值的URL扩展类型的QCborValue
对象。该值稍后可以使用toUrl()
来检索。CBOR URL类型是一种扩展类型,由一个标记为
Url
的字符串表示。另请参阅
- __init__(uuid)
- Parameters:
uuid –
QUuid
创建一个包含由
uuid
表示的值的QCborValue
对象的UUID扩展类型。该值稍后可以使用toUuid()
来检索。CBOR UUID 类型是一种扩展类型,由一个标记为
Uuid
的字节数组表示。- __init__(s)
- Parameters:
s – 字符串
- __init__(v)
- Parameters:
v – 浮点数
创建一个带有浮点值
d
的QCborValue
。该值稍后可以使用toDouble()
来获取。CBOR浮点数值与整数值是不同的。因此,包含整数的
QCborValue
对象与包含浮点数的QCborValue
对象在比较时会有所不同,即使对象中包含的值是等价的。- __init__(i)
- Parameters:
i – 整数
- __init__(i)
- Parameters:
i – 整数
创建一个带有整数值
i
的QCborValue
。该值稍后可以使用toInteger()
来获取。CBOR整数值与浮点数值是不同的。因此,包含整数的
QCborValue
对象与包含浮点数的QCborValue
对象在比较时会有所不同,即使对象中包含的值是等价的。- __init__(u)
- Parameters:
u – 整数
- __init__(t_[, tv=QCborValue()])
- Parameters:
t –
QCborKnownTags
tv –
QCborValue
这是一个重载函数。
创建一个
QCborValue
,用于表示由标签值tag
表示的扩展类型,并标记值taggedValue
。稍后可以使用tag()
检索标签,并使用taggedValue()
检索标记值。- __init__(tag[, taggedValue=QCborValue()])
- Parameters:
标签 –
QCborTag
taggedValue –
QCborValue
- compare(other)¶
- Parameters:
其他 –
QCborValue
- Return type:
整数
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
比较此值和
other
,并返回一个整数,指示此值是否应在other
之前(如果结果为负)或之后(如果结果为正)排序。如果此函数返回0,则两个值相等且内容相同。如果每个
QCborValue
包含一个数组或映射,则比较会递归到它们包含的元素。扩展类型¶
QCborValue
比较等于包含扩展类型的QCborValue
,例如Url
和Url
及其等效的标记表示。因此,例如,以下表达式为真:QCborValue(QUrl("https://example.com")) == QCborValue(QCborKnownTags.Url, "https://example.com")
请注意,像
QUrl
和QDateTime
这样的Qt类型会对其参数进行规范化和其他修改。上面的表达式为真,仅仅是因为右侧的字符串是左侧QCborValue
将采用的规范化值。例如,如果“https”部分在两边都是大写的,那么比较将会失败。有关QCborValue
执行的规范化的信息,请查阅采用相关Qt类型的构造函数的文档。排序顺序¶
CBOR中的排序顺序在RFC 7049的第3.9节中定义,该节讨论了在遵循规范编码时映射中键的排序。根据规范,“排序是在键数据项的表示字节上执行的”,并列出以下结果:
“如果两个键的长度不同,较短的键排序在前;”
“如果两个键的长度相同,则按(字节顺序)字典序中值较小的键排序在前。”
这导致QCborValues的排序结果出人意料,该函数的结果与稍后通过比较包含元素得到的结果不同。例如,包含字符串“zzz”的
QCborValue
在包含字符串“foobar”的QCborValue
之前排序,即使作为QStrings
或QByteArrays
比较时,“zzz”在“foobar”之后排序(字典顺序)。规范没有明确指出对于不同类型的值应该采用什么排序顺序(它说排序不应该“关注主要类型的3/5位分割”)。
QCborValue
假设类型也应该排序。Type
枚举的数值按该顺序排列,除了扩展类型,它们比较时等同于它们的标记等价物。- static fromCbor(reader)¶
- Parameters:
reader –
QCborStreamReader
- Return type:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
从
reader
中找到的CBOR流中解码一个项目,并返回等效的表示。此函数是递归的:如果项目是映射或数组,它将解码该映射或数组中的所有项目,直到最外层的对象完成。此函数不需要在
QCborStreamReader
的根元素上使用。例如,以下代码展示了如何从文件开头跳过CBOR签名标签:if reader.isTag() and reader.toTag() == QCborKnownTags.Signature: reader.next() contents = QCborValue.fromCbor(reader)
返回的值可能部分完成,即使解码失败,也可能与有效的
QCborValue
无法区分。要确定是否存在错误,请检查lastError()
是否指示错误条件。此函数在第一个错误后立即停止解码。- static fromCbor(ba[, error=None])
- Parameters:
ba –
QByteArray
错误 –
QCborParserError
- Return type:
这是一个重载函数。
从字节数组
ba
中找到的 CBOR 流中解码一个项目,并返回等效的表示形式。此函数是递归的:如果项目是映射或数组,它将解码该映射或数组中找到的所有项目,直到最外层的对象完成。此函数将错误状态(如果有)存储在
error
指向的对象中,同时存储错误发生的偏移量。如果没有发生错误,它将在错误状态中存储NoError
以及它消耗的字节数(即存储第一个未使用字节的偏移量)。使用这些信息可以解析可能存在于同一字节数组中的更多数据。返回的值可能部分完成,即使解码失败,也可能与有效的
QCborValue
无法区分。要确定是否存在错误,请检查error
中是否存储了错误。此函数在第一个错误后立即停止解码。- static fromCbor(data, len[, error=None])
- Parameters:
data – 字符串
len – int
错误 –
QCborParserError
- Return type:
- static fromCbor(data, len[, error=None])
- Parameters:
data –
quint8
len – int
错误 –
QCborParserError
- Return type:
- static fromJsonValue(v)¶
- Parameters:
v –
QJsonValue
- Return type:
将包含在
v
中的JSON值转换为其对应的CBOR值并返回。从JSON转换为CBOR时不会丢失数据,因为CBOR类型集比JSON更丰富。此外,使用此函数转换为CBOR的值可以使用toJsonValue()
转换回JSON,且不会丢失数据。下表列出了JSON类型到CBOR类型的映射:
JSON 类型
CBOR 类型
布尔
布尔
数字
整数(如果数字没有小数且在
qint64
范围内)或双精度浮点数字符串
字符串
数组
数组
对象
地图
空值
空值
QJsonValue
也可以是未定义的,表示之前的操作未能完成(例如,搜索对象中不存在的键)。未定义的值不是 JSON 类型,可能不会出现在 JSON 数组和对象中,但如果相应的QJsonValue
是未定义的,此函数确实会返回QCborValue
的未定义值。- static fromVariant(variant)¶
- Parameters:
variant – 对象
- Return type:
将
QVariant
variant
转换为QCborValue
并返回。QVariants 可能包含大量不同的元类型,其中许多在 CBOR 中没有相应的表示。这包括所有用户定义的元类型。在使用 CBOR 准备传输时,建议仔细编码每个值,以防止表示丢失。
下表列出了此函数将应用的转换:
Qt (C++) 类型
CBOR 类型
无效 (QVariant())
未定义
bool
布尔
std::nullptr_t
空
short
,ushort
,int
,uint
,qint64
整数
quint64
整数,如果超出qint64范围则为双精度浮点数
float
,double
双精度
简单类型
数组,使用 QCborArray::formJsonArray() 转换
数组或映射
QJsonObject
使用
fromJsonObject()
转换的Map使用
fromJsonValue()
转换QString
字符串
QStringList
数组
映射
数组
映射
网址
Uuid
如果
isNull()
返回 true,则无论QVariant
携带的类型如何,都会返回或插入一个空的QCborValue
到列表或对象中。请注意,Qt 6.0 中影响isNull()
的行为变化也会影响此函数。对于上面未列出的其他类型,将尝试转换为字符串,通常但不总是通过调用
toString()
。如果转换失败,该值将被替换为未定义的CBOR值。请注意,toString()
对于大多数类型也是有损的。请注意,通过
toString()
进行的转换可能会随时更改。未来可能会扩展QVariant
和QCborValue
以支持更多类型,这将导致此函数执行转换的方式发生变化。- isArray()¶
- Return type:
布尔
如果此
QCborValue
是数组类型,则返回true。可以使用toArray()
来获取数组值。- isBool()¶
- Return type:
布尔
如果这个
QCborValue
是一个布尔值,则返回true。可以使用toBool()
来获取该值。- isByteArray()¶
- Return type:
布尔
如果此
QCborValue
是字节数组类型,则返回true。可以使用toByteArray()
检索字节数组值。另请参阅
- isContainer()¶
- Return type:
布尔
如果
QCborValue
是数组或映射,此便捷函数返回true。- isDateTime()¶
- Return type:
布尔
如果此
QCborValue
是日期/时间类型,则返回true。可以使用toDateTime()
来获取该值。日期/时间是使用DateTime
标签的扩展类型。此外,当从CBOR流解码时,
QCborValue
将解释值为UnixTime_t
的标签,并将其转换为等效的日期/时间。另请参阅
- isDouble()¶
- Return type:
布尔
如果此
QCborValue
是浮点类型,则返回true。可以使用toDouble()
来获取该值。另请参阅
- isFalse()¶
- Return type:
布尔
如果此
QCborValue
是一个值为false的布尔值,则返回true。此函数存在的原因是,在内部,CBOR布尔值被存储为两种独立的类型,一种为true,另一种为false。- isInteger()¶
- Return type:
布尔
如果此
QCborValue
是整数类型,则返回true。可以使用toInteger()
来检索整数值。另请参阅
- isInvalid()¶
- Return type:
布尔
如果此
QCborValue
不是任何有效类型,则返回true。无效的QCborValues与具有未定义值的QCborValues不同,它们通常表示解码错误。另请参阅
- isMap()¶
- Return type:
布尔
如果此
QCborValue
是映射类型,则返回true。可以使用toMap()
来获取映射值。- isNull()¶
- Return type:
布尔
如果此
QCborValue
为空类型,则返回true。CBOR空值用于表示未提供的可选值。它们与未定义的值不同,因为空值通常不是早期错误或问题的结果。
空值与未定义值以及无效的
QCborValue
对象是不同的。API不会创建无效的QCborValues,但它们可能由于解析错误而存在。- isRegularExpression()¶
- Return type:
布尔
如果此
QCborValue
包含正则表达式的模式,则返回true。可以使用toRegularExpression()
检索该模式。- isSimpleType()¶
- Return type:
布尔
如果此
QCborValue
是CBOR简单类型之一,则返回true。即使对于API中没有枚举的类型,也可以稍后使用type()
检索类型本身。还可以使用isSimpleType(QCborSimpleType)
重载进行检查。另请参阅
QCborSimpleType
isSimpleType(QCborSimpleType)
toSimpleType()
- isSimpleType(st)
- Parameters:
st –
QCborSimpleType
- Return type:
布尔
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
这是一个重载函数。
如果此
QCborValue
是简单类型且toSimpleType()
将返回st
,则返回true,否则返回false。此函数可用于检查任何CBOR简单类型,即使API中没有枚举的类型。例如,对于值为12的简单类型,您可以编写:value.isSimpleType(QCborSimpleType(12))
另请参阅
QCborValue(QCborSimpleType)
isSimpleType()
isFalse()
isTrue()
isNull
isUndefined()
toSimpleType()
- isString()¶
- Return type:
布尔
如果此
QCborValue
是字符串类型,则返回true。可以使用toString()
来获取字符串值。另请参阅
- isTag()¶
- Return type:
布尔
如果此
QCborValue
是标签类型,则返回true。可以使用tag()
检索标签值,并使用taggedValue()
检索带标签的值。此函数对于API识别的扩展类型也返回true。对于在Qt API更新以支持扩展类型之前直接处理扩展类型的代码,可以通过使用
taggedValue()
重新创建标签+标记值对。- isTrue()¶
- Return type:
布尔
如果此
QCborValue
是一个值为true的布尔值,则返回true。此函数存在的原因是,在内部,CBOR布尔值存储为两种不同的类型,一种用于false,一种用于true。- isUndefined()¶
- Return type:
布尔
如果此
QCborValue
是未定义类型,则返回true。CBOR未定义值用于指示缺失的信息,通常是由于之前的操作未按预期完成的结果。它们也被
QCborArray
和QCborMap
API用来指示未找到搜索的项目。未定义的值与空值不同。
QCborValue
具有未定义值的对象也与无效的QCborValue
对象不同。API 不会创建无效的 QCborValues,但它们可能由于解析错误而存在。另请参阅
- isUrl()¶
- Return type:
布尔
如果此
QCborValue
是URL类型,则返回true。可以使用toUrl()
来获取URL值。- isUuid()¶
- Return type:
布尔
如果此
QCborValue
包含UUID,则返回true。可以使用toUuid()
来获取该值。- __ne__(rhs)¶
- Parameters:
rhs –
QCborArray
- Return type:
布尔
- __ne__(rhs)
- Parameters:
rhs –
QCborMap
- Return type:
布尔
- __ne__(rhs)
- Parameters:
rhs –
QCborValue
- Return type:
布尔
比较
lhs
和rhs
,如果内容不同则返回 true,否则返回 false。如果每个QCborValue
包含数组或映射,则对其中包含的元素进行递归比较。有关Qt中CBOR相等的更多信息,请参见
compare()
。另请参阅
compare()
operator==()
operator==()
operator==()
operator
- __lt__(rhs)¶
- Parameters:
rhs –
QCborArray
- Return type:
布尔
- __lt__(rhs)
- Parameters:
rhs –
QCborMap
- Return type:
布尔
- __lt__(rhs)
- Parameters:
rhs –
QCborValue
- Return type:
布尔
比较
lhs
和rhs
,如果lhs
应该在rhs
之前排序,则返回 true,否则返回 false。如果每个QCborValue
包含数组或映射,则对其中包含的元素进行递归比较。有关CBOR排序顺序的更多信息,请参见
compare()
。另请参阅
compare()
operator==()
operator==()
operator==()
operator!=()
- __le__(rhs)¶
- Parameters:
rhs –
QCborArray
- Return type:
布尔
- __le__(rhs)
- Parameters:
rhs –
QCborMap
- Return type:
布尔
- __le__(rhs)
- Parameters:
rhs –
QCborValue
- Return type:
布尔
比较
lhs
和rhs
,如果lhs
应该在rhs
之前排序或等于rhs
,则返回 true,否则返回 false。如果每个QCborValue
包含数组或映射,则对其中包含的元素进行递归比较。有关CBOR排序顺序的更多信息,请参见
compare()
。另请参阅
compare()
operator
operator==()
operator==()
operator!=()
- __eq__(rhs)¶
- Parameters:
rhs –
QCborArray
- Return type:
布尔
- __eq__(rhs)
- Parameters:
rhs –
QCborMap
- Return type:
布尔
- __eq__(rhs)
- Parameters:
rhs –
QCborValue
- Return type:
布尔
比较
lhs
和rhs
,如果它们包含相同的内容则返回 true,否则返回 false。如果每个QCborValue
包含数组或映射,则对它们包含的元素进行递归比较。有关Qt中CBOR相等的更多信息,请参见
compare()
。另请参阅
compare()
operator==()
operator!=()
operator
- __gt__(rhs)¶
- Parameters:
rhs –
QCborArray
- Return type:
布尔
- __gt__(rhs)
- Parameters:
rhs –
QCborMap
- Return type:
布尔
- __gt__(rhs)
- Parameters:
rhs –
QCborValue
- Return type:
布尔
比较
lhs
和rhs
,如果lhs
应该在rhs
之后排序,则返回 true,否则返回 false。如果每个QCborValue
包含数组或映射,则对其中包含的元素进行递归比较。有关CBOR排序顺序的更多信息,请参见
compare()
。另请参阅
compare()
operator>=()
operator==()
operator==()
operator!=()
- __ge__(rhs)¶
- Parameters:
rhs –
QCborArray
- Return type:
布尔
- __ge__(rhs)
- Parameters:
rhs –
QCborMap
- Return type:
布尔
- __ge__(rhs)
- Parameters:
rhs –
QCborValue
- Return type:
布尔
比较
lhs
和rhs
,如果lhs
应该在rhs
之后排序或等于rhs
,则返回 true,否则返回 false。如果每个QCborValue
包含数组或映射,则比较会递归到它们包含的元素。有关CBOR排序顺序的更多信息,请参见
compare()
。另请参阅
compare()
operator>()
operator==()
operator==()
operator!=()
- operator(key)¶
- Parameters:
key –
QLatin1String
- Return type:
- operator(key)
- Parameters:
key – str
- Return type:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
如果这个
QCborValue
是一个QCborMap
,则搜索其元素以查找键与key
匹配的值。如果映射中没有与key
匹配的键,或者如果这个QCborValue
对象不是映射,则返回未定义的值。此函数等同于:
value.toMap().value(key)
另请参阅
operator[](qint64)
operator[]
value()
find()
- operator(key)
- Parameters:
key – int
- Return type:
这是一个重载函数。
如果这个
QCborValue
是一个QCborMap
,则搜索其键与key
匹配的元素值。如果这是一个QCborArray
,则返回索引为key
的元素。如果数组或映射中没有匹配的值,或者如果这个QCborValue
对象不是数组或映射,则返回未定义的值。- swap(other)¶
- Parameters:
其他 –
QCborValue
交换此
QCborValue
对象和other
的内容。返回此扩展的
QCborValue
对象的标签,如果它是标签类型,否则返回defaultValue
。CBOR通过将一个数字(标签)与存储的表示形式关联来表示扩展类型。此函数返回该数字。要检索表示形式,请使用
taggedValue()
。- taggedValue([defaultValue=QCborValue()])¶
- Parameters:
defaultValue –
QCborValue
- Return type:
返回此扩展
QCborValue
对象的标记值,如果它是标记类型,否则返回defaultValue
。CBOR通过将一个数字(标签)与存储的表示形式关联来表示扩展类型。此函数返回该表示形式。要检索标签,请使用
tag()
。- toArray()¶
- Return type:
- toArray(defaultValue)
- Parameters:
defaultValue –
QCborArray
- Return type:
- toBool([defaultValue=false])¶
- Parameters:
defaultValue – 布尔值
- Return type:
布尔
返回存储在此
QCborValue
中的布尔值,如果它是布尔类型。否则,返回defaultValue
。- toByteArray([defaultValue={}])¶
- Parameters:
defaultValue –
QByteArray
- Return type:
返回存储在此
QCborValue
中的字节数组值,如果它是字节数组类型。否则,返回defaultValue
。请注意,此函数不执行从其他类型到
QByteArray
的转换。- toCbor([opt=QCborValue.EncodingOption.NoTransformation])¶
- Parameters:
opt –
EncodingOption
的组合- Return type:
将此
QCborValue
对象编码为其CBOR表示形式,使用opt
中指定的选项,并返回包含该表示形式的字节数组。此函数不会失败,除非此
QCborValue
或任何包含的项目(如果这是映射或数组)无效。API通常不会生成无效类型,但可能是由于解码错误导致的。默认情况下,此函数不对
QCborValue
中的值进行任何转换,将所有浮点数直接写为双精度(double
)类型。如果指定了UseFloat
选项,它将使用单精度(float
)表示任何浮点值,前提是使用该表示不会导致精度损失。这包括无穷大和NaN值。同样,如果指定了
UseFloat16
,此函数将尝试使用半精度(qfloat16
)浮点数,如果转换为该类型不会导致精度损失。对于无穷大和NaN,这总是成立的。如果指定了
UseIntegers
,它将为任何包含实际整数的浮点值使用整数。- toCbor(writer[, opt=QCborValue.EncodingOption.NoTransformation])
- Parameters:
writer –
QCborStreamWriter
opt –
EncodingOption
的组合
这是一个重载函数。
将此
QCborValue
对象编码为其CBOR表示,使用opt
中指定的选项,写入由writer
指定的写入器。同一个写入器可以被多个QCborValue使用,例如,为了编码较大数组中的不同元素。此函数不会失败,除非此
QCborValue
或任何包含的项目(如果这是映射或数组)无效。API通常不会生成无效类型,但可能是由于解码错误导致的。默认情况下,此函数不对
QCborValue
中的值进行任何转换,将所有浮点数直接写为双精度(binary64)类型。如果指定了UseFloat
选项,它将使用单精度(binary32)表示任何浮点值,前提是使用该表示不会导致精度损失。这包括无穷大和NaN值。同样,如果指定了
UseFloat16
,此函数将尝试使用半精度(binary16)浮点数,如果转换到该精度不会导致精度损失。对于无穷大和NaN,这总是成立的。如果指定了
UseIntegers
,它将为任何包含实际整数的浮点值使用整数。返回存储在此
QCborValue
中的日期/时间值,如果它是日期/时间扩展类型。否则,返回defaultValue
。请注意,此函数不执行从其他类型到
QDateTime
的转换。- toDiagnosticNotation([opts=QCborValue.DiagnosticNotationOption.Compact])¶
- Parameters:
opts –
DiagnosticNotationOption
的组合- Return type:
字符串
创建与此CBOR对象等效的诊断表示法并返回它。
opts
参数控制表示法的方言。诊断表示法在调试时非常有用,可以帮助开发人员理解存储在QCborValue
或CBOR流中的值。因此,尽管表示法是唯一的并且可以解析回内存格式或CBOR流,但Qt API不提供将诊断表示法解析回内存格式或CBOR流的支持。CBOR诊断符号由RFC 7049的第6节规定。它是CBOR流的文本表示,与JSON非常相似,但它支持JSON中没有的CBOR类型。由
ExtendedFormat
标志启用的扩展格式目前在一些IETF草案中,其格式可能会发生变化。此函数生成与
toCbor()
在没有提供任何转换选项时生成的流等效的表示。这也意味着,如果对象是使用fromCbor()
创建的,此函数可能不会生成用于创建对象的流的表示,因为该函数可能已经应用了转换。有关流的无转换高保真表示,请参见cbordump
示例。- toDouble([defaultValue=0])¶
- Parameters:
defaultValue – 浮点数
- Return type:
浮点数
返回存储在此
QCborValue
中的浮点值,如果它是Double类型。如果它是Integer类型,此函数将返回转换为double的整数值。在任何其他情况下,它返回defaultValue
。- toInteger([defaultValue=0])¶
- Parameters:
defaultValue – int
- Return type:
整数
返回存储在此
QCborValue
中的整数值,如果它是整数类型。如果它是Double类型,此函数返回转换为整数的浮点值。在任何其他情况下,它返回defaultValue
。- toJsonValue()¶
- Return type:
将此
QCborValue
对象转换为JSON中的等效表示,并将其作为QJsonValue
返回。请注意,CBOR 包含比 JSON 更丰富和更广泛的类型集,因此在此转换过程中可能会丢失一些信息。下表比较了 CBOR 类型与 JSON 类型,并指出是否可能丢失信息。
CBOR 类型
JSON 类型
注释
布尔
布尔
不可能丢失数据
Double
Number
无穷大和NaN将被转换为Null;其他值不会丢失数据
整数
数字
如果整数大于2 53或小于-2 53,转换时可能会丢失数据。
空值
空值
不可能丢失数据
未定义
空值
类型信息丢失
字符串
字符串
不可能丢失数据
字节数组
字符串
转换为无损编码,如Base64url,但字符串和字节数组之间的区别丢失
其他简单类型
字符串
类型信息丢失
数组
数组
转换适用于每个包含的值
Map
Object
键被转换为字符串;值根据此表转换
标签和扩展类型
特殊
标签号本身丢失,标记值转换为JSON
有关将CBOR映射键转换为字符串的信息,请参见
toJsonObject()
。如果这个
QCborValue
包含未定义的值,这个函数也会返回一个未定义的QJsonValue
。请注意,JSON不支持未定义的值,未定义的QJsonValues是对规范的扩展。它们不能被保存在QJsonArray
或QJsonObject
中,但可以从函数返回以指示失败。对于所有其他意图和目的,它们与null相同。