class QCborValue#

The QCborValue class encapsulates a value in CBOR. More

概要#

方法#

静态函数#

注意

本文档可能包含自动从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 是用于 QCborArrayQCborMap 的辅助类。当使用这些类中的任何 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 是以规范格式编码流所必需的,但在其他情况下并不必要。

另请参阅

toCbor()

class DiagnosticNotationOption#

(继承自 enum.Flag) 此枚举用于 toDiagnosticNotation() 的选项参数中,以修改输出格式。

常量

描述

QCborValue.Compact

不使用换行符,以紧凑表示。

QCborValue.LineWrapped

使用换行符,每行一个 QCborValue

QCborValue.ExtendedFormat

使用一些不同的选项来表示值,这些选项在RFC 7049中找不到。这些选项可能会更改。

目前,ExtendedFormat将会改变字节数组的表示方式。在没有它的情况下,它们总是以十六进制编码,不带空格。有它时,toCbor()将根据上下文使用带空格的十六进制、base64或base64url编码。

另请参阅

toDiagnosticNotation()

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 或 URI

QCborValue.RegualExpression

QRegularExpression : 正则表达式的模式

QCborValue.Uuid

QUuid : UUID

另请参阅

type()

__init__(i)#
参数:

i – int

创建一个具有整数值 iQCborValue 。值可以用 toInteger() 查询。

CBOR 整数值与浮点值是不同的。因此,整数类型的 QCborValue 对象与包含浮点数的 QCborValue 对象进行比较时会有不同的结果,即使对象中包含的值相同。

__init__()

创建一个类型为 UndefinedQCborValue

CBOR 未定义值用于表示缺失信息,通常是由于之前的操作未按预期完成而产生的。它们也被用于 QCborArrayQCborMap 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

创建一个具有浮点值 dQCborValue 对象。该值可以在以后使用 toDouble() 方法检索。

CBOR 浮点值与整数值不同。因此,包含整数的 QCborValue 对象与包含浮点数的 QCborValue 对象不同,即使两个对象中的值是等效的。

__init__(s)
参数:

s – str

__init__(uuid)
参数:

uuidQUuid

创建一个包含由 uuid 表示的值的 UUID 扩展类型的 QCborValue 对象。该值可以在以后使用 toUuid() 方法检索。

CBOR UUID 类型是一个表示为字节序列的扩展类型,标记为 Uuid

__init__(url)
参数:

urlQUrl

创建一个表示 url 的 URL 扩展类型 QCborValue 对象。该值可以稍后通过 toUrl() 方法检索。

CBOR URL 类型是一个扩展类型,由标记为 Url 的字符串表示。

__init__(s)
参数:

s – str

创建一个具有字符串值 sQCborValue。该值可以稍后通过 toString() 方法检索。

__init__(rx)
参数:

rxQRegularExpression

创建一个表示 rx 的正则表达式模式扩展类型 QCborValue 对象。该值可以稍后通过 toRegularExpression() 方法检索。

CBOR正则表达式类型是一种扩展类型,它是一个表示为"QRegularExpresson"标签的字符串。请注意,CBOR正则表达式仅存储模式,所以QRegularExpression对象可能携带的任何标志都将丢失。

__init__(dt)
参数:

dtQDateTime

创建一个包含由dt表示的值的QCborValue日期/时间扩展类型对象。该值可以通过使用toDateTime()稍后检索。

CBOR日期/时间类型是使用标签标记的扩展类型:要么是一个标签为"DateTime"的字符串(ISO日期格式),要么是一个标签为"UnixTime_t"的数字(自1970年开始的秒数,UTC)。在解析CBOR流时,QCborValue会将"UnixTime_t"转换为基于字符串的类型。

__init__(m)
参数:

mQCborMap

__init__(t_[, tv=QCborValue()])
参数:

这是一个重载函数。

创建一个由标签值tag表示的扩展类型的QCborValue,其标记值为taggedValue。稍后可以使用tag()来检索标签,使用taggedValue()来检索标记值。

__init__(st)
参数:

stQCborSimpleType

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

创建一个简单类型为stQCborValue。稍后可以通过toSimpleType()isSimpleType方法检索该类型。

CBOR简单类型是没有相关值的类型,类似于C++中的std::nullptr_t类型,其唯一可能值是None

如果stQCborSimpleType::Null,那么生成的QCborValue的类型将是Null类型,同样对于QCborSimpleType::Undefined。如果stQCborSimpleType::FalseQCborSimpleType::True,创建的QCborValue将是一个包含false或true值的布尔值。

此功能可以用于API中未定义的简单类型。例如,要创建简单类型为12的QCborValue,可以编写如下代码:

value = QCborValue(QCborSimpleType(12))

在发表相关规范之前,不应使用简单类型,因为其他实现可能不支持它们。简单类型值24到31已保留,不得使用。

isSimpleType()isNull()isUndefined()isTrue()isFalse()

__init__(tag[taggedValue=QCborValue()])
参数:
__init__(t_)
参数:

tType

创建一个类型为 t_QCborValue。此类类型相关的值(如果有的话)将使用默认构造函数创建。

另请参阅

type()

__init__(s)
参数:

sQLatin1String

__init__(b_)
参数:

b – bool

创建一个带有布尔值 bQCborValue。该值可以使用 toBool() 在以后检索。

内部,CBOR 布尔用一对类型表示,一个用于真,一个用于假。因此,布尔 QCborValue 将在 isSimpleType()isSimpleType(QCborSimpleType::False)isSimpleType(QCborSimpleType::True) 之一的调用中对 isSimpleType() 返回 true。

__init__(other)
参数:

otherQCborValue

other 的内容复制到该对象中。

__init__(a)
参数:

aQCborArray

__init__(ba)
参数:

baQByteArray

创建一个具有字节数组值 baQCborValue 对象。该值可以使用 toByteArray() 方法稍后检索。

__init__(s)
参数:

s – str

创建一个具有字符串值 sQCborValue。该值可以稍后通过 toString() 方法检索。

compare(other)#
参数:

otherQCborValue

返回类型:

int

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

比较该值和 other,并返回一个整数,表示该值是否应该在 other 之前(如果结果为负)或之后(如果结果为正)排序。如果此函数返回 0,则两个值相等并且包含相同的内容。

如果每个 QCborValue 包含数组或映射,比较将递归到它们包含的元素中。

扩展类型#

QCborValue 与包含扩展类型(如 UrlUrl)及其等效标记表示的 QCborValue 相等。因此,例如,以下表达式是正确的

QCborValue(QUrl("https://example.com")) == QCborValue(QCborKnownTags.Url, "https://example.com")

请注意,Qt 类型如 QUrlQDateTime 会对其参数进行归一化和其他修改。上述表达式之所以成立,仅仅是因为右侧的字符串是左侧的 QCborValue 会采取的规范化值。例如,如果“https”部分在两侧都是大写,比较将失败。有关 QCborValue 执行的归一化信息,请参阅采用相关 Qt 类型的构造函数的文档。

排序顺序#

CBOR 中的排序顺序由 RFC 7049 第 3.9 节定义,该节讨论了在遵循规范编码时 Map 中的键排序。根据规范,“排序是在键数据项表示的字节上执行的”,并列举了以下后果:

  • “如果两个键的长度不同,较短的键排序更早;”

  • “如果两个键的长度相同,按字节方式进行字典顺序较低值的键排序更早。”

这导致 QCborValue 的排序令人惊讶,其中此函数的结果与稍后通过比较包含元素获取的结果不同。例如,包含字符串“zzz”的 QCborValue 排在包含字符串“foobar”的 QCborValue 之前,尽管在将字符串视为 QStringsQByteArrays 进行比较时,“zzz”排在“foobar”之后(字典顺序)。

规范没有明确说明不同类型值应进行何种排序顺序(它表示排序不应关注主要类型中 3/5 位分割)。QCborValue 假设类型也应在排序中进行。该枚举 Type 的数值按此顺序排列,例外是扩展类型,它们按其标记等价物进行比较。

注意

排序顺序是初步的,可能会改变。应用程序目前不应依赖于此函数返回的顺序。

另请参阅

compare() compare() operator==()

static fromCbor(reader)#
参数:

readerQCborStreamReader

返回类型:

QCborValue

警告

本节包含自动从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])
参数:
返回类型:

QCborValue

这是一个重载函数。

从字节序列ba中解码CBOR流中的一个项并返回等效表示。此函数是递归的:如果项是映射或数组,它将解码在该映射或数组中找到的所有项,直到最外层的对象完成。

如果存在错误,此函数将在error指向的对象中存储错误状态以及错误发生的偏移量。如果没有错误发生,它将在错误状态中存储NoError,并存储它消耗的字节数(即,存储第一个未使用字节的位置)。使用这些信息可以解析同一字节序列中存在的其他数据。

返回的值可能部分完整且与有效的QCborValue无法区分,即使解码失败也是如此。为了确定是否有错误,请检查是否在error中存储了错误。此函数在发现第一个错误后立即停止解码。

static fromCbor(data, len[, error=None])
参数:
返回类型:

QCborValue

static fromCbor(data, len[, error=None])
参数:
返回类型:

QCborValue

static fromJsonValue(v)#
参数:

vQJsonValue

返回类型:

QCborValue

v 中包含的 JSON 值转换为相应的 CBOR 值并返回。从 JSON 转换到 CBOR 不会丢失数据,因为 CBOR 类型集比 JSON 更丰富。此外,使用此函数转换为 CBOR 的值可以使用 toJsonValue() 转换回 JSON,而不会丢失数据。

以下表格列出了 JSON 类型到 CBOR 类型的映射

JSON 类型

CBOR 类型

布尔值

布尔值

数字

整数(如果数字没有小数部分且在 qint64 范围内)或双精度数

字符串

字符串

数组

数组

对象

映射

空值

空值

QJsonValue 也可以是未定义的,表示之前未能完成的操作(例如,在一个对象中搜索不存在的键)。未定义值不是 JSON 类型,不会出现在 JSON 数组和对象中,但此函数会返回对应的 QCborValue 未定义值,如果相应的 QJsonValue 是未定义的。

static fromVariant(variant)#
参数:

variant – 对象

返回类型:

QCborValue

QVariant variant 转换为 QCborValue 并返回。

QVariants 可能包含大量不同的元类型,其中许多在 CBOR 中没有对应的表示。这包括所有用户定义的元类型。在准备使用 CBOR 的传输时,建议仔细编码每个值以防止丢失表示。

以下表格列出了此函数将应用的转换

Qt (C++) 类型

CBOR 类型

无效 (QVariant())

未定义

布尔值

布尔值

std::nullptr_t

空值

short,ushort,int,uint,qint64

整数

quint64

整数,如果超出 qint64 范围则表示为 Double

floatdouble

Double

QByteArray

字节数组(ByteArray)

QDateTime

日期时间(DateTime)

QCborSimpleType

简单类型

QJsonArray

数组,通过 QCborArray::formJsonArray() 转换

QJsonDocument

数组或映射(Map)

QJsonObject

映射,通过 fromJsonObject() 转换

QJsonValue

通过 fromJsonValue() 转换

QRegularExpression

正则表达式

QString

字符串

QStringList

数组

QVariantHash

映射

QVariantList

数组

QVariantMap

映射

QUrl

URL

QUuid

UUID

如果 isNull() 返回 true,则无论携带的 QVariant 类型如何,都将返回或插入一个 null 的 QCborValue。注意,Qt 6.0 中的行为更改影响了 isNull(),同时也影响了此函数。

对于以上未列出的其他类型,将尝试转换为字符串,通常通过调用 toString()。如果转换失败,则将值替换为 Undefined CBOR 值。请注意,对于大多数类型,toString() 也会导致信息丢失。

请注意,通过 toString() 进行的转换可能会随时更改。现在可能是,将来也可能扩展 QVariantQCborValue 以支持更多类型,这将导致此函数的转换行为发生变化。

isArray()#
返回类型:

布尔值

如果此 QCborValue 为数组类型,则返回 true。可以通过 toArray() 获取数组值。

另请参阅

type() toArray()

isBool()#
返回类型:

布尔值

如果这个QCborValue 是布尔类型,则返回真。可以使用 toBool() 方法获取值。

isByteArray()#
返回类型:

布尔值

如果这个QCborValue 是字节数组类型,则返回真。可以使用 toByteArray() 方法获取值。

另请参阅

type() toByteArray()

isContainer()#
返回类型:

布尔值

这个便利函数返回真,如果QCborValue 是数组或映射。

另请参阅

isArray() isMap()

isDateTime()#
返回类型:

布尔值

如果这个QCborValue 是日期/时间类型,则返回真。可以使用 toDateTime() 方法获取值。日期/时间是使用标签 DateTime 的扩展类型。

此外,从CBOR流解码时,QCborValue 会解析值为 UnixTime_t 的标记并将其转换为等效的日期和时间。

另请参阅

type() toDateTime()

isDouble()#
返回类型:

布尔值

如果这个 QCborValue 是浮点型,则返回 true。值可以使用 toDouble() 方法获取。

另请参阅

type() toDouble()

isFalse()#
返回类型:

布尔值

如果这个 QCborValue 是值为 false 的布尔型,则返回 true。此函数存在的原因是,在内部,CBOR 布尔值以两种不同的类型存储,一种是 true,一种是 false。

isInteger()#
返回类型:

布尔值

如果这个 QCborValue 是整型,则返回 true。整数值可以使用 toInteger() 方法获取。

另请参阅

type() toInteger()

isInvalid()#
返回类型:

布尔值

如果这个 QCborValue 不是任何有效类型,则返回 true。无效的 QCborValue 与具有未定义值的那些不同,它们通常表示解码错误。

另请参阅

isUndefined() isNull()

isMap()#
返回类型:

布尔值

如果此 QCborValue 是映射类型,则返回 true。可以使用 toMap() 获取映射值。

另请参阅

type() 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)
参数:

stQCborSimpleType

返回类型:

布尔值

警告

本节包含自动从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() 方法获取字符串值。

另请参阅

type() toString()

isTag()#
返回类型:

布尔值

如果这个QCborValue 是标签类型,则返回 true。标签值可以使用 tag() 获取,并使用 taggedValue() 获取标记值。

此函数对于 API 能够识别的扩展类型也返回 true。在 Qt API 更新以支持它们之前,处理扩展类型的代码可以直接使用 taggedValue() 重新创建标签 + 标记值对。

isTrue()#
返回类型:

布尔值

如果这个 QCborValue 是具有 true 值的布尔值,则返回 true。此函数存在是因为,在内部,CBOR 布尔值被存储为两种不同的类型,一个用于假,一个用于真。

isUndefined()#
返回类型:

布尔值

如果这个 QCborValue 是未定义类型,则返回 true。

CBOR 未定义值用于表示缺失信息,通常是由于之前的操作未按预期完成而产生的。它们也被用于 QCborArrayQCborMap API 来表示搜索的项目未找到。

未定义值与空值不同。

QCborValue 对象的未定义值与无效的 QCborValue 对象也不同。API 不会创建无效的 QCborValue 对象,但它们可能是由于解析错误而存在的。

另请参阅

type() isNull() isInvalid()

isUrl()#
返回类型:

布尔值

如果此 QCborValue 为 URL 类型,将返回 true。可以通过 toUrl() 方法获取 URL 值。

另请参阅

type() toUrl()

isUuid()#
返回类型:

布尔值

如果此 QCborValue 包含一个 UUID,将返回 true。可以使用 toUuid() 方法获取该值。

另请参阅

type() toUuid()

__ne__(other)#
参数:

otherQCborValue

返回类型:

布尔值

比较此值和 other,如果内容不同则返回 true,否则返回 false。如果每个 QCborValue 包含一个数组或映射,比较将递归到它们包含的元素中。

有关 Qt 中 CBOR 平等的更多信息,请参阅,compare()

另请参阅

compare() operator==() operator==() operator

__lt__(other)#
参数:

otherQCborValue

返回类型:

布尔值

比较此值和 other,如果此值应排在 other 之前,则返回 true,否则返回 false。如果每个 QCborValue 包含一个数组或映射,比较将递归到它们包含的元素中。

有关 CBOR 排序顺序的更多信息,请参阅 compare()

另请参阅

compare() operator==() operator==() operator==() operator!=()

__eq__(other)#
参数:

otherQCborValue

返回类型:

布尔值

比较此值与 other ,如果它们具有相同的内 容则返回 true,否则返回 false。如果每个 QCborValue 包含数组或映射,比较会递归到其中包含的元素。

有关 Qt 中 CBOR 平等的更多信息,请参阅,compare()

另请参阅

compare() operator==() operator!=() operator

operator(key)#
参数:

keyQLatin1String

返回类型:

QCborValue

operator(key)
参数:

key – str

返回类型:

QCborValue

警告

本节包含自动从C++翻译到Python的代码片段,可能包含错误。

如果此 QCborValue 是一个 QCborMap ,查找与 key 匹配的值。如果映射中没有与 key 匹配的键,或者此 QCborValue 对象不是映射,则返回未定义的值。

此函数等同于

value.toMap().value(key)

另请参阅

operator[](qint64) operator[] value() find()

operator(key)
参数:

key – int

返回类型:

QCborValue

这是一个重载函数。

如果这个 QCborValue 是一个 QCborMap,将搜索元素以查找与其 key 匹配的值。如果它是一个 QCborArray,则返回其索引为 key 的元素。如果在数组或映射中没有匹配的值,或者如果这个 QCborValue 对象不是一个数组或映射,则返回 undefined 值。

另请参阅

operator[] operator[] value() find() operator[] at()

swap(other)#
参数:

otherQCborValue

交换此 QCborValue 对象和 other 的内容。

tag([defaultValue=QCborTag(-1)])#
参数:

defaultValueQCborTag

返回类型:

QCborTag

如果此扩展的 QCborValue 对象是标签类型,则返回该对象的标签;否则返回 defaultValue

CBOR 通过将一个数字(标签)与存储表示相关联来表示扩展类型。此函数返回该数字。要检索表示,请使用 taggedValue()

taggedValue([defaultValue=QCborValue()])#
参数:

defaultValueQCborValue

返回类型:

QCborValue

返回当前扩展的 QCborValue 对象的标记值,如果其为标记类型,否则返回 defaultValue

CBOR 通过将数字(标记)与其存储表示关联来表示扩展类型。此函数返回该表示。要获取标记,请使用 tag()

toArray(defaultValue)#
参数:

defaultValueQCborArray

返回类型:

QCborArray

toArray()
返回类型:

QCborArray

toBool([defaultValue=false])#
参数:

defaultValue – bool

返回类型:

布尔值

如果此 QCborValue 是布尔类型,则返回其中存储的布尔值。否则,返回 defaultValue

另请参阅

isBool() isTrue() isFalse()

toByteArray([defaultValue={}])#
参数:

defaultValueQByteArray

返回类型:

QByteArray

如果此 QCborValue 是字节数组类型,则返回存储在此的字节数组值。否则,返回 defaultValue

注意,此函数不会将其他类型转换为 QByteArray

toCbor(writer[, opt=QCborValue.EncodingOption.NoTransformation])#
参数:

这是一个重载函数。

将此 QCborValue 对象编码为其 CBOR 表示形式,并使用在 opt 中指定的选项,写入由 writer 指定的地方。同一个 writer 可以由多个 QCborValues 共享,例如,在编码较大的数组中的不同元素时。

如果此 QCborValue 或任何包含的项(如果这是一个映射或数组)无效,则此函数将不会失败。无效类型通常不会由 API 生成,但可能是解码错误的结果。

默认情况下,此函数不会对 QCborValue 中的值进行转换,直接将所有浮点数作为双精度(二进制64)类型写入。如果指定了 UseFloat 选项,则对于任何没有精度损失的浮点数值,它将使用单精度(二进制32)表示。这包括无穷大和 NaN 值。

同样,如果指定了 UseFloat16 选项,则在导致没有精度损失的情况下,此函数将尝试使用半精度(二进制16)浮点数。这总是对无穷大和 NaN 有效的。

如果指定了 UseIntegers 选项,则对于任何包含实际整数的浮点数值,它将使用整数。

toCbor([opt=QCborValue.EncodingOption.NoTransformation])
参数:

optEncodingOption 的组合

返回类型:

QByteArray

将此 QCborValue 对象编码为其 CBOR 表示形式,使用在 opt 中指定的选项,并返回包含该表示形式的字节数组。

如果此 QCborValue 或任何包含的项(如果这是一个映射或数组)无效,则此函数将不会失败。无效类型通常不会由 API 生成,但可能是解码错误的结果。

默认情况下,此函数对 QCborValue 中的值不执行转换,直接将所有浮点数以双精度 (double) 类型写入。如果指定了 UseFloat 选项,则对于在那种表示中不会丢失精度的任何浮点值,它将使用单精度 (float)。这包括无穷大和 NaN 值。

类似地,如果指定了 UseFloat16,此函数将尝试使用半精度 (qfloat16) 浮点数,如果转换到那种类型不会丢失精度(对于无穷大和 NaN 始终如此)。

如果指定了 UseIntegers 选项,则对于任何包含实际整数的浮点数值,它将使用整数。

toDateTime([defaultValue={}])#
参数:

defaultValueQDateTime

返回类型:

QDateTime

返回存储在此 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

另请参阅

toCbor() toJson()

toDouble([defaultValue=0])#
参数:

defaultValue – float

返回类型:

float

如果 QCborValue 是Double类型,则返回此 QCborValue 中存储的浮点值。如果是整数类型,此函数返回转换成double的整数值。在其他任何情况下,返回 defaultValue

toInteger([defaultValue=0])#
参数:

defaultValue – int

返回类型:

int

如果此QCborValue 为整型,则返回其存储的整数值。如果是浮点型,则此函数将浮点值转换为整型值。在其他任何情况下,返回默认值 defaultValue

另请参阅

请参阅isInteger() isDouble() toDouble()

toJsonValue()#
返回类型:

QJsonValue

将此 QCborValue 对象转换为等价的 JSON 表示形式,并以 QJsonValue 的形式返回。

请注意,CBOR 包含的类型集合比 JSON 更丰富、更全面,因此在此转换中可能会丢失一些信息。以下表格比较了 CBOR 类型与 JSON 类型,并指出是否可能会丢失信息。

CBOR 类型

JSON 类型

注释

布尔值

布尔值

可能不会丢失数据

Double

数字

无穷大和 NaN 将被转换为 None;对于其他值没有数据丢失

整数

数字

如果整数大于 253 或小于 -253,则在转换中可能会丢失数据。

空值

空值

可能不会丢失数据

未定义

空值

类型信息将丢失

字符串

字符串

可能不会丢失数据

字节数组

字符串

转换为无损失的编码,例如 Base64url,但字符串和字节数组之间的区别将丢失

其他简单类型

字符串

类型信息将丢失

数组

数组

转换适用于包含的每个值

映射

对象

键被转换为字符串;值根据以下表格进行转换

标签和扩展类型

特殊

标签编号本身将丢失,并且带有标签的值将转换为 JSON

有关将 CBOR 映射键转换为字符串的信息,请参阅 toJsonObject()

如果此 QCborValue 包含未定义值,则此函数也将返回一个未定义的 QJsonValue。请注意,JSON 不支持未定义值,未定义的 QJsonValues 是规范的一个扩展。它们不能被保存在 QJsonArrayQJsonObject 中,但可以从函数返回以指示失败。在其他所有用途上,它们与 null 相同。

标签和扩展类型的特殊处理#

一些标签被特别处理,并改变了从 CBOR 到 JSON 的带有标签的值的转换。以下表格列出了这些特殊情况

标签

CBOR 类型

转换

ExpectedBase64url

字节数组

将字节数组编码为 Base64url

ExpectedBase64

字节数组

将字节数组编码为Base64

预期Base16

字节数组

将字节数组编码为十六进制

URL

URL和字符串

使用toEncoded() 以将编码正规化到URL的完整编码格式

UUID

UUID和字节数组

使用toString() 来创建字符串表示形式

toMap()#
返回类型:

QCborMap

toMap(defaultValue)
参数:

defaultValueQCborMap

返回类型:

QCborMap

toRegularExpression([defaultValue={}])#
参数:

defaultValueQRegularExpression

返回类型:

QRegularExpression

返回此QCborValue 中存储的正则表达式值,如果它是扩展的正则表达式模式类型。否则,返回defaultValue

请注意,此函数不执行从其他类型到QRegularExpression 的转换。

toSimpleType([defaultValue=QCborSimpleType.Undefined])#
参数:

defaultValueQCborSimpleType

返回类型:

QCborSimpleType

如果此QCborValue 是简单类型,则返回该QCborValue 的简单类型。如果不是简单类型,则返回 defaultValue

以下类型是简单类型,并且此函数将返回列表中的值

toString([defaultValue={}])#
参数:

defaultValue – 字符串

返回类型:

str

返回此 QCborValue 中存储的字符串值(如果它是字符串类型)。否则,返回 defaultValue

注意,此函数不会从其他类型转换为 QString

toUrl([defaultValue={}])#
参数:

defaultValueQUrl

返回类型:

QUrl

如果此 QCborValue 是 URL 扩展类型,则返回存储在其中的 URL 值。否则,返回 defaultValue

注意,此函数不会从其他类型转换为 QUrl

toUuid([defaultValue={}])#
参数:

defaultValueQUuid

返回类型:

QUuid

如果此QCborValue 为 UUID 扩展类型,则返回存储在此处的 UUID 值。否则,返回 defaultValue

请注意,此函数不执行从其他类型到 QUuid 的转换。

toVariant()#
返回类型:

对象

将此值转换为原生 Qt 类型并返回相应的 QVariant

以下表格列出了 QCborValue typesQt meta types 之间的映射。

CBOR 类型

Qt 或 C++ 类型

说明

整数

qint64

Double

double

布尔值

布尔值

空值

std::nullptr_t

未定义

未指定类型(QVariant())

字节数组

QByteArray

字符串

QString

数组

QVariantList

递归转换所有值

映射

QVariantMap

键类型会被“转换为字符串”

其他简单类型

QCborSimpleType

日期时间(DateTime)

QDateTime

URL

QUrl

正则表达式

QRegularExpression

UUID

QUuid

其他 tags

特殊

忽略标签,并使用此函数转换标记值

请注意,此函数也递归地使用此函数转换 CBOR 地图和数组中的值,并将它们放入 QVariantMapQVariantList 中。您不会在 QVariants 中找到 QCborMapQCborArray

QVariantMaps 的键是字符串,与 CBOR 不同,因此将 QCborMap 转换为 QVariantMap 将涉及键值“转换为字符串”的步骤。有关详细信息,请参阅 toJsonObject()

type()#
返回类型:

类型

返回此 QCborValue 的类型。类型还可以稍后通过“isXxx”函数之一检索。