如何在Qt的QCborStreamWriter中实现嵌套映射序列化?
解决QCborStreamWriter嵌套映射的写入问题
QCborStreamWriter是流式序列化工具,它不支持直接插入预构建的QCborMap对象,而是需要通过startMap()/endMap()、startArray()/endArray()这类方法逐层级构建嵌套结构,这样才能发挥它低内存占用、高效写入的优势,正好匹配你处理大数据的需求。
核心用法示例
下面是实现数组嵌套映射、映射嵌套多层结构的完整代码:
#include <QCborStreamWriter> #include <QFile> int main() { QFile file("data.cbor"); if (!file.open(QIODevice::WriteOnly)) { return 1; } QCborStreamWriter writer(&file); // 写入一个包含嵌套映射的数组 writer.startArray(); // 第一个元素:简单键值对映射 writer.startMap(2); // 提前指定键值对数量可提升写入效率,为可选参数 writer.append("name"); writer.append("Alice"); writer.append("age"); writer.append(30); writer.endMap(); // 第二个元素:多层嵌套的映射结构 writer.startMap(); writer.append("user_details"); // 嵌套子映射 writer.startMap(); writer.append("user_id"); writer.append(1001); writer.append("labels"); // 子映射内嵌套数组 writer.startArray(3); writer.append("admin"); writer.append("active"); writer.append("verified"); writer.endArray(); writer.endMap(); writer.endMap(); writer.endArray(); file.close(); return 0; }
关键注意事项
- 严格层级对应:所有嵌套结构必须通过
startXxx()开启,写入内容后用endXxx()闭合,层级不匹配会生成无效的CBOR数据。 - 预指定元素数量:调用
startMap(count)或startArray(count)时传入元素数量,能让writer预先分配空间,进一步提升大数据场景下的写入效率。 - 内存与体积优势:相比QJsonDocument一次性构建完整DOM树,QCborStreamWriter边写边存,内存占用极低;同时CBOR格式本身比JSON更紧凑,文件体积会明显小于JSON输出。
内容的提问来源于stack exchange,提问作者Sylvain B.
相关产品推荐
相关产品推荐

