PySide6.QtCore.QCborValue

class QCborValue

QCborValue 类封装了 CBOR 中的一个值。更多

概要

方法

静态函数

注意

本文档可能包含从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中不支持的其它扩展类型由QCborValueTag类型表示。标签可以通过tag()检索,标记的值可以使用taggedValue()获取。

为了支持未来的兼容性,包含扩展Qt类型的QCborValues与相同内容的标签类型比较相等。换句话说,以下表达式为真:

QCborValue(uuid) == QCborValue(QCborKnownTags.Uuid, uuid.toRfc4122())

未定义和空值

QCborValue 可以包含一个“null”值,该值不属于任何特定类型。它类似于C++中的std::nullptr_t类型,其唯一可能的值是NoneQCborValue 有一个接受此类类型的构造函数,并创建一个空的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 是 QCborArrayQCborMap 的辅助类。它是你在使用这些类中的可变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是必需的,以便以规范格式编码流,但在其他情况下并不必要。

另请参阅

toCbor()

class DiagnosticNotationOption

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

常量

描述

QCborValue.Compact

不使用任何换行符,生成紧凑的表示形式。

QCborValue.LineWrapped

使用换行符,每行一个QCborValue

QCborValue.ExtendedFormat

使用一些不同的选项来表示值,这些选项在RFC 7049中未找到。这些选项可能会发生变化。

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

另请参阅

toDiagnosticNotation()

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

QCborValue.RegularExpression

QRegularExpression : 正则表达式的模式

QCborValue.Uuid

QUuid : 一个UUID

另请参阅

type()

__init__()

创建一个QCborValue类型的Undefined

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

未定义的值由Undefined simple type表示。因此,具有未定义值的QCborValues也会对isSimpleType()isSimpleType(QCborSimpleType::Undefined)返回true。

未定义的值与空值不同。

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

__init__(st)
Parameters:

stQCborSimpleType

警告

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

创建一个QCborValue的简单类型st。该类型稍后可以使用toSimpleType()以及isSimpleType (st)来检索。

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__(t_)
Parameters:

t类型

创建一个类型为 t_QCborValue。与此类型关联的值(如果有)将默认构造。

另请参阅

type()

__init__(s)
Parameters:

sQLatin1String

__init__(s)
Parameters:

s – 字符串

创建一个带有字符串值 sQCborValue。该值稍后可以使用 toString() 来获取。

__init__(b_)
Parameters:

b – 布尔值

创建一个带有布尔值 bQCborValue。该值稍后可以使用 toBool() 来获取。

在内部,CBOR 布尔值由一对类型表示,一个表示 true,一个表示 false。因此,布尔值的 QCborValues 将返回 true 给 isSimpleType()isSimpleType(QCborSimpleType::False)isSimpleType(QCborSimpleType::True) 中的一个。

__init__(ba)
Parameters:

baQByteArray

创建一个带有字节数组值 baQCborValue。稍后可以使用 toByteArray() 来检索该值。

__init__(a)
Parameters:

aQCborArray

__init__(m)
Parameters:

mQCborMap

__init__(other)
Parameters:

其他QCborValue

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

__init__(dt)
Parameters:

dtQDateTime

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

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

__init__(rx)
Parameters:

rxQRegularExpression

创建一个QCborValue对象,该对象属于正则表达式模式扩展类型,并包含由rx表示的值。该值稍后可以使用toRegularExpression()来检索。

CBOR正则表达式类型是一种扩展类型,由一个标记为RegularExpression的字符串表示。请注意,CBOR正则表达式仅存储模式,因此QRegularExpression对象可能携带的任何标志将会丢失。

__init__(s)
Parameters:

s – 字符串

创建一个带有字符串值 sQCborValue。该值稍后可以使用 toString() 来获取。

__init__(url)
Parameters:

urlQUrl

创建一个包含由url表示的值的URL扩展类型的QCborValue对象。该值稍后可以使用toUrl()来检索。

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

__init__(uuid)
Parameters:

uuidQUuid

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

CBOR UUID 类型是一种扩展类型,由一个标记为 Uuid 的字节数组表示。

__init__(s)
Parameters:

s – 字符串

__init__(v)
Parameters:

v – 浮点数

创建一个带有浮点值 dQCborValue。该值稍后可以使用 toDouble() 来获取。

CBOR浮点数值与整数值是不同的。因此,包含整数的QCborValue对象与包含浮点数的QCborValue对象在比较时会有所不同,即使对象中包含的值是等价的。

__init__(i)
Parameters:

i – 整数

__init__(i)
Parameters:

i – 整数

创建一个带有整数值 iQCborValue。该值稍后可以使用 toInteger() 来获取。

CBOR整数值与浮点数值是不同的。因此,包含整数的QCborValue对象与包含浮点数的QCborValue对象在比较时会有所不同,即使对象中包含的值是等价的。

__init__(u)
Parameters:

u – 整数

__init__(t_[, tv=QCborValue()])
Parameters:

这是一个重载函数。

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

__init__(tag[, taggedValue=QCborValue()])
Parameters:
compare(other)
Parameters:

其他QCborValue

Return type:

整数

警告

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

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

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

扩展类型

QCborValue 比较等于包含扩展类型的 QCborValue,例如 UrlUrl 及其等效的标记表示。因此,例如,以下表达式为真:

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

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

排序顺序

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

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

  • “如果两个键的长度相同,则按(字节顺序)字典序中值较小的键排序在前。”

这导致QCborValues的排序结果出人意料,该函数的结果与稍后通过比较包含元素得到的结果不同。例如,包含字符串“zzz”的QCborValue在包含字符串“foobar”的QCborValue之前排序,即使作为QStringsQByteArrays比较时,“zzz”在“foobar”之后排序(字典顺序)。

规范没有明确指出对于不同类型的值应该采用什么排序顺序(它说排序不应该“关注主要类型的3/5位分割”)。QCborValue 假设类型也应该排序。Type 枚举的数值按该顺序排列,除了扩展类型,它们比较时等同于它们的标记等价物。

注意

排序顺序是初步的,可能会发生变化。应用程序暂时不应依赖此函数返回的顺序。

另请参阅

compare() compare() operator==()

static fromCbor(reader)
Parameters:

readerQCborStreamReader

Return type:

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])
Parameters:
Return type:

QCborValue

这是一个重载函数。

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

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

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

static fromCbor(data, len[, error=None])
Parameters:
Return type:

QCborValue

static fromCbor(data, len[, error=None])
Parameters:
Return type:

QCborValue

static fromJsonValue(v)
Parameters:

vQJsonValue

Return type:

QCborValue

将包含在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:

QCborValue

QVariant variant转换为QCborValue并返回。

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

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

Qt (C++) 类型

CBOR 类型

无效 (QVariant())

未定义

bool

布尔

std::nullptr_t

short, ushort, int, uint, qint64

整数

quint64

整数,如果超出qint64范围则为双精度浮点数

float, double

双精度

QByteArray

ByteArray

QDateTime

DateTime

QCborSimpleType

简单类型

QJsonArray

数组,使用 QCborArray::formJsonArray() 转换

QJsonDocument

数组或映射

QJsonObject

使用fromJsonObject()转换的Map

QJsonValue

使用 fromJsonValue() 转换

QRegularExpression

RegularExpression

QString

字符串

QStringList

数组

QVariantHash

映射

QVariantList

数组

QVariantMap

映射

QUrl

网址

QUuid

Uuid

如果 isNull() 返回 true,则无论 QVariant 携带的类型如何,都会返回或插入一个空的 QCborValue 到列表或对象中。请注意,Qt 6.0 中影响 isNull() 的行为变化也会影响此函数。

对于上面未列出的其他类型,将尝试转换为字符串,通常但不总是通过调用toString()。如果转换失败,该值将被替换为未定义的CBOR值。请注意,toString()对于大多数类型也是有损的。

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

isArray()
Return type:

布尔

如果此QCborValue是数组类型,则返回true。可以使用toArray()来获取数组值。

另请参阅

type() toArray()

isBool()
Return type:

布尔

如果这个QCborValue是一个布尔值,则返回true。可以使用toBool()来获取该值。

isByteArray()
Return type:

布尔

如果此QCborValue是字节数组类型,则返回true。可以使用toByteArray()检索字节数组值。

另请参阅

type() toByteArray()

isContainer()
Return type:

布尔

如果QCborValue是数组或映射,此便捷函数返回true。

另请参阅

isArray() isMap()

isDateTime()
Return type:

布尔

如果此QCborValue是日期/时间类型,则返回true。可以使用toDateTime()来获取该值。日期/时间是使用DateTime标签的扩展类型。

此外,当从CBOR流解码时,QCborValue 将解释值为 UnixTime_t 的标签,并将其转换为等效的日期/时间。

另请参阅

type() toDateTime()

isDouble()
Return type:

布尔

如果此QCborValue是浮点类型,则返回true。可以使用toDouble()来获取该值。

另请参阅

type() toDouble()

isFalse()
Return type:

布尔

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

isInteger()
Return type:

布尔

如果此QCborValue是整数类型,则返回true。可以使用toInteger()来检索整数值。

另请参阅

type() toInteger()

isInvalid()
Return type:

布尔

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

另请参阅

isUndefined() isNull()

isMap()
Return type:

布尔

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

另请参阅

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

stQCborSimpleType

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()来获取字符串值。

另请参阅

type() 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未定义值用于指示缺失的信息,通常是由于之前的操作未按预期完成的结果。它们也被QCborArrayQCborMap API用来指示未找到搜索的项目。

未定义的值与空值不同。

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

另请参阅

type() isNull() isInvalid()

isUrl()
Return type:

布尔

如果此QCborValue是URL类型,则返回true。可以使用toUrl()来获取URL值。

另请参阅

type() toUrl()

isUuid()
Return type:

布尔

如果此QCborValue包含UUID,则返回true。可以使用toUuid()来获取该值。

另请参阅

type() toUuid()

__ne__(rhs)
Parameters:

rhsQCborArray

Return type:

布尔

__ne__(rhs)
Parameters:

rhsQCborMap

Return type:

布尔

__ne__(rhs)
Parameters:

rhsQCborValue

Return type:

布尔

比较 lhsrhs,如果内容不同则返回 true,否则返回 false。如果每个 QCborValue 包含数组或映射,则对其中包含的元素进行递归比较。

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

另请参阅

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

__lt__(rhs)
Parameters:

rhsQCborArray

Return type:

布尔

__lt__(rhs)
Parameters:

rhsQCborMap

Return type:

布尔

__lt__(rhs)
Parameters:

rhsQCborValue

Return type:

布尔

比较 lhsrhs,如果 lhs 应该在 rhs 之前排序,则返回 true,否则返回 false。如果每个 QCborValue 包含数组或映射,则对其中包含的元素进行递归比较。

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

另请参阅

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

__le__(rhs)
Parameters:

rhsQCborArray

Return type:

布尔

__le__(rhs)
Parameters:

rhsQCborMap

Return type:

布尔

__le__(rhs)
Parameters:

rhsQCborValue

Return type:

布尔

比较 lhsrhs,如果 lhs 应该在 rhs 之前排序或等于 rhs,则返回 true,否则返回 false。如果每个 QCborValue 包含数组或映射,则对其中包含的元素进行递归比较。

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

另请参阅

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

__eq__(rhs)
Parameters:

rhsQCborArray

Return type:

布尔

__eq__(rhs)
Parameters:

rhsQCborMap

Return type:

布尔

__eq__(rhs)
Parameters:

rhsQCborValue

Return type:

布尔

比较 lhsrhs,如果它们包含相同的内容则返回 true,否则返回 false。如果每个 QCborValue 包含数组或映射,则对它们包含的元素进行递归比较。

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

另请参阅

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

__gt__(rhs)
Parameters:

rhsQCborArray

Return type:

布尔

__gt__(rhs)
Parameters:

rhsQCborMap

Return type:

布尔

__gt__(rhs)
Parameters:

rhsQCborValue

Return type:

布尔

比较 lhsrhs,如果 lhs 应该在 rhs 之后排序,则返回 true,否则返回 false。如果每个 QCborValue 包含数组或映射,则对其中包含的元素进行递归比较。

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

另请参阅

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

__ge__(rhs)
Parameters:

rhsQCborArray

Return type:

布尔

__ge__(rhs)
Parameters:

rhsQCborMap

Return type:

布尔

__ge__(rhs)
Parameters:

rhsQCborValue

Return type:

布尔

比较 lhsrhs,如果 lhs 应该在 rhs 之后排序或等于 rhs,则返回 true,否则返回 false。如果每个 QCborValue 包含数组或映射,则比较会递归到它们包含的元素。

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

另请参阅

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

operator(key)
Parameters:

keyQLatin1String

Return type:

QCborValue

operator(key)
Parameters:

key – str

Return type:

QCborValue

警告

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

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

此函数等同于:

value.toMap().value(key)

另请参阅

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

operator(key)
Parameters:

key – int

Return type:

QCborValue

这是一个重载函数。

如果这个QCborValue是一个QCborMap,则搜索其键与key匹配的元素值。如果这是一个QCborArray,则返回索引为key的元素。如果数组或映射中没有匹配的值,或者如果这个QCborValue对象不是数组或映射,则返回未定义的值。

另请参阅

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

swap(other)
Parameters:

其他QCborValue

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

tag([defaultValue=QCborTag(-1)])
Parameters:

defaultValueQCborTag

Return type:

QCborTag

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

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

taggedValue([defaultValue=QCborValue()])
Parameters:

defaultValueQCborValue

Return type:

QCborValue

返回此扩展QCborValue对象的标记值,如果它是标记类型,否则返回defaultValue

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

toArray()
Return type:

QCborArray

toArray(defaultValue)
Parameters:

defaultValueQCborArray

Return type:

QCborArray

toBool([defaultValue=false])
Parameters:

defaultValue – 布尔值

Return type:

布尔

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

另请参阅

isBool() isTrue() isFalse()

toByteArray([defaultValue={}])
Parameters:

defaultValueQByteArray

Return type:

QByteArray

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

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

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

optEncodingOption 的组合

Return type:

QByteArray

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

此函数不会失败,除非此QCborValue或任何包含的项目(如果这是映射或数组)无效。API通常不会生成无效类型,但可能是由于解码错误导致的。

默认情况下,此函数不对QCborValue中的值进行任何转换,将所有浮点数直接写为双精度(double)类型。如果指定了UseFloat选项,它将使用单精度(float)表示任何浮点值,前提是使用该表示不会导致精度损失。这包括无穷大和NaN值。

同样,如果指定了UseFloat16,此函数将尝试使用半精度(qfloat16)浮点数,如果转换为该类型不会导致精度损失。对于无穷大和NaN,这总是成立的。

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

toCbor(writer[, opt=QCborValue.EncodingOption.NoTransformation])
Parameters:

这是一个重载函数。

将此QCborValue对象编码为其CBOR表示,使用opt中指定的选项,写入由writer指定的写入器。同一个写入器可以被多个QCborValue使用,例如,为了编码较大数组中的不同元素。

此函数不会失败,除非此QCborValue或任何包含的项目(如果这是映射或数组)无效。API通常不会生成无效类型,但可能是由于解码错误导致的。

默认情况下,此函数不对QCborValue中的值进行任何转换,将所有浮点数直接写为双精度(binary64)类型。如果指定了UseFloat选项,它将使用单精度(binary32)表示任何浮点值,前提是使用该表示不会导致精度损失。这包括无穷大和NaN值。

同样,如果指定了UseFloat16,此函数将尝试使用半精度(binary16)浮点数,如果转换到该精度不会导致精度损失。对于无穷大和NaN,这总是成立的。

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

toDateTime([defaultValue={}])
Parameters:

defaultValueQDateTime

Return type:

QDateTime

返回存储在此QCborValue中的日期/时间值,如果它是日期/时间扩展类型。否则,返回defaultValue

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

toDiagnosticNotation([opts=QCborValue.DiagnosticNotationOption.Compact])
Parameters:

optsDiagnosticNotationOption 的组合

Return type:

字符串

创建与此CBOR对象等效的诊断表示法并返回它。opts参数控制表示法的方言。诊断表示法在调试时非常有用,可以帮助开发人员理解存储在QCborValue或CBOR流中的值。因此,尽管表示法是唯一的并且可以解析回内存格式或CBOR流,但Qt API不提供将诊断表示法解析回内存格式或CBOR流的支持。

CBOR诊断符号由RFC 7049的第6节规定。它是CBOR流的文本表示,与JSON非常相似,但它支持JSON中没有的CBOR类型。由ExtendedFormat标志启用的扩展格式目前在一些IETF草案中,其格式可能会发生变化。

此函数生成与toCbor()在没有提供任何转换选项时生成的流等效的表示。这也意味着,如果对象是使用fromCbor()创建的,此函数可能不会生成用于创建对象的流的表示,因为该函数可能已经应用了转换。有关流的无转换高保真表示,请参见cbordump示例。

另请参阅

toCbor() toJson()

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:

QJsonValue

将此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是对规范的扩展。它们不能被保存在QJsonArrayQJsonObject中,但可以从函数返回以指示失败。对于所有其他意图和目的,它们与null相同。

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

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

标签

CBOR 类型

转换

ExpectedBase64url

字节数组

将字节数组编码为Base64url

ExpectedBase64

字节数组

将字节数组编码为Base64

ExpectedBase16

字节数组

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

Url

Url 和 字符串

使用 toEncoded() 将编码规范化为 URL 的完全编码格式

Uuid

Uuid 和字节数组

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

toMap()
Return type:

QCborMap

toMap(defaultValue)
Parameters:

defaultValueQCborMap

Return type:

QCborMap

toRegularExpression([defaultValue={}])
Parameters:

defaultValueQRegularExpression

Return type:

QRegularExpression

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

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

toSimpleType([defaultValue=QCborSimpleType.Undefined])
Parameters:

defaultValueQCborSimpleType

Return type:

QCborSimpleType

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

以下类型是简单类型,此函数将返回列出的值:

toString([defaultValue={}])
Parameters:

defaultValue – str

Return type:

字符串

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

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

toUrl([defaultValue={}])
Parameters:

defaultValueQUrl

Return type:

QUrl

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

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

toUuid([defaultValue={}])
Parameters:

defaultValueQUuid

Return type:

QUuid

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

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

toVariant()
Return type:

对象

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

下表列出了QCborValue typesQt meta types之间的映射关系。

CBOR 类型

Qt 或 C++ 类型

备注

整数

qint64

双精度

double

布尔

bool

std::nullptr_t

未定义

无类型 (QVariant())

字节数组

QByteArray

字符串

QString

数组

QVariantList

递归转换所有值

Map

QVariantMap

键类型被“字符串化”

其他简单类型

QCborSimpleType

DateTime

QDateTime

网址

QUrl

RegularExpression

QRegularExpression

Uuid

QUuid

其他标签

特殊

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

请注意,CBOR Maps和Arrays中的值也会使用此函数递归转换,并放置在QVariantMapQVariantList中。你不会在QVariant中找到存储的QCborMapQCborArray

QVariantMaps 具有字符串键,与 CBOR 不同,因此将 QCborMap 转换为 QVariantMap 将意味着键值的“字符串化”步骤。详情请参阅 toJsonObject()

type()
Return type:

类型

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