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