【Qt】解析YAML文件

        YAML文件是一种人类可读的数据序列化格式,常用于配置文件和数据交换。它使用缩进和换行来表示层级关系,具有简洁、可读性强的特点。

YAML文件常见的用途

配置文件YAML文件常用于存储应用程序的配置信息。通过YAML格式,可以轻松地定义和组织各种配置选项,例如数据库连接信息、日志级别、服务器设置等。
数据交换YAML文件可以用做不同系统之间交换数据的格式。由于YAML的可读性强,它成为了一种常见的数据交换格式,用在不同应用程序之间传输和共享数据。
测试数据YAML文件可以用于定义测试数据,特别是在自动化测试中。测试数据可以包括输入数据、预期输出、测试条件等,以便在测试过程中使用。
API文档YAML文件可以用于编写API文档。通过使用YAML格式,可以清晰定义API的各个端点、参数、请求和响应格式等信息,以便开发人员和用户更好地理解和使用API。
构建工具许多构建工具(如Jenkins、Travis CI等)使用YAML文件来定义构建和部署流程。通过使用YAML格式,可以轻松地定义构建步骤、依赖关系、环境变量等信息。

        这只是一些常见的用途,实际上,YAML文件可以在许多其他领域和场景中使用。由于其简洁性和可读性,YAML成为了一种流行的数据序列化格式。

YAML文件语法

        YAML对缩进非常敏感,因此正确的缩进是确保文件能够得到正确解析的关键。

键值对:使用冒号 : 将键和值分隔。键和值之间使用一个或多个空格进行缩进。如:

name: John Doe
age: 30

 列表:使用短横杠 - 表示列表项。列表项可以是任何类型的值,包括字符串、数字、布尔值等。如:

hobbies:
  - reading
  - hiking
  - cooking

 嵌套结构:使用缩进表示层级关系。嵌套结构可以包含键值对、列表或其他嵌套结构。如:

address:
  street: 123 Main St
  city: New York
  country: USA

 注释:使用井号 # 表示注释。注释可以出现在行的任何位置,并且从井号开始一直到行末为止。如:

# 这是一个注释
name: John Doe  # 这也是一个注释

引用:可以使用引用来重复使用相同的值或结构。使用 & 定义引用,使用 * 引用已定义的引用,如:

defaults: &defaults
  timeout: 30
  retries: 3

server:
  <<: *defaults
  address: example.com

        在上述示例中,<<是YAML中的合并键。它允许将一个映射(即YAML中的键值对集合)合并到另一个映射中,减少重复输入。

        在这个例子中,defaults是一个键,&defaults是将整个映射设置为一个引用。timeoutretriesdefaults映射的键值对。

  server是另一个映射,通过使用<<合并键,可以将defaults映射合并到server映射中。这意味着server映射会继承defaults中的键值对。所以sever映射最终会包含timeoutretriesaddress这三个键值对。

YAML文件解析

        非常遗憾,Qt框架中并没有直接支持解析YAML文件的类,可以使用第三方库yaml-cpp来解析YAML文件。

        首先需要下载和安装yaml-cpp库:

        yaml-cpp官方GitHub页面:GitHub - jbeder/yaml-cpp: A YAML parser and emitter in C++

        下载完成后,按照文档中的指示进行编译和安装。

        在Qt项目中引入yaml-cpp库,需要在Qt项目中包含yaml-cpp库的头文件和链接yaml-cpp的库文件。

        需要在Qt项目文件中加入 LIBS+= -lyaml-cpp

解析

#include <yaml-cpp/yaml.h>

// 读取并解析YAML文件
YAML::Node config = YAML::LoadFile("config.yaml");

// 检索YAML中的值
std::string name = config["name"].as<std::string>();
int age = config["age"].as<int>();

// 将值打印到控制台
qDebug() << "Name: " << QString::fromStdString(name);
qDebug() << "Age: " << age;

生成

#include <yaml-cpp/yaml.h>

// 创建一个YAML节点并设置值
YAML::Node config;
config["name"] = "John Doe";
config["age"] = 30;

// 将YAML节点写入文件
std::ofstream fout("config.yaml");
fout << config;

// 关闭文件流
fout.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值