😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍读取yaml配置信息。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞
文章目录
- :smirk:1. yaml介绍
- :blush:2. yaml-cpp库安装
- :satisfied:3. yaml读取示例
- 读取yaml
- 读取string和vector
😏1. yaml介绍
YAML(YAML Ain’t Markup Language)是一种简单可读的数据序列化格式。它是一种简洁和易于理解的语言,用于表示数据结构和配置信息。YAML最初是为了在不同编程语言之间交换数据而设计的,但它也被广泛用于配置文件、日志文件以及其他需要结构化数据的地方。
YAML采用了一种基于缩进的语法来表示数据的层次结构。它使用空格缩进来表示层级关系,而不是像XML或JSON那样使用特殊的标记符号。这使得YAML文件在视觉上更具可读性,并且可以使用普通文本编辑器进行编辑。
YAML还支持一些高级特性,如引用、包含外部文件、多行字符串等。它的灵活性使得它成为许多应用程序中处理配置文件和数据交换的首选格式。
😊2. yaml-cpp库安装
Github仓库:https://github.com/jbeder/yaml-cpp
Tutorial:https://github.com/jbeder/yaml-cpp/wiki/Tutorial
安装编译:
git clone https://github.com/jbeder/yaml-cpp.git
cd yaml-cpp
mkdir build && cd build
cmake ..
make
make test
sudo make install
yaml-cpp 默认构建的就是静态库,也就是 unix 类系统下的 .a 文件。
😆3. yaml读取示例
读取yaml
尝试打开读取yaml示例如下:
// main.cpp
#include <yaml-cpp/yaml.h> //yaml-cpp 头文件
#include <iostream>int main(int argc, char** argv) {try {YAML::Node node = YAML::LoadFile("file.yml");std::cout << node << std::endl; //输出yaml数据} catch (...) { //文件为非yaml格式抛出异常std::cout << "error" << std::endl;}return 0;
}
读取string和vector
新建config.yaml配置文件:
custom_db:db_domain: 10.0.1.1db_username: rootdb_passwd: my_passwddb_schema: testredis:redis_domain: 10.0.1.2redis_passwd: 123456hello:num_config: [yaml-test]name_config: [powered, by, yaml-test]
读取代码示例:
// main.cpp
#include <iostream>
#include <string>
#include <stdio.h>
#include <unistd.h>
#include <vector>
#include <yaml-cpp/yaml.h>// read config
const std::string DB_CONF = "config.yaml";int main(int argc, char *argv[]) {/*----------------------------------- test yaml-cpp ----------------------------------------*/std::cout << "This code is for test yaml" << std::endl;/* Node conf. */YAML::Node conf = YAML::LoadFile(DB_CONF);/*----------------------------------- display db_config ----------------------------------------*/std::cout << "Database:"<< std::endl;std::cout << "domain: " << conf["custom_db"]["db_domain"].as<std::string>() << std::endl;std::cout << "username:" << conf["custom_db"]["db_username"].as<std::string>() << std::endl;std::cout << "passwd: " << conf["custom_db"]["db_passwd"].as<std::string>() << std::endl;std::cout << "schema: " << conf["custom_db"]["db_schema"].as<std::string>() << std::endl;/*----------------------------------- display redis ----------------------------------------*/std::cout << "Redis" << std::endl;std::cout << "redis_domain: " << conf["redis"]["redis_domain"].as<std::string>() << std::endl;std::cout << "redis_passwd: " << conf["redis"]["redis_passwd"].as<std::string>() << std::endl;/*----------------------------------- display hello ----------------------------------------*//* vector of name string. */std::vector<std::string> name_vec = conf["hello"]["num_config"].as<std::vector<std::string> >();if(!name_vec.empty())std::cout << name_vec[0] << std::endl;std::vector<std::string> name_vec2 = conf["hello"]["name_config"].as<std::vector<std::string> >();if(!name_vec2.empty()){for (int i = 0; i < name_vec2.size(); i++){std::cout << name_vec2[i] << " ";}std::cout << std::endl;}return 0;
}
编译:g++ main.cpp -lyaml-cpp
结果如下:
This code is for test yaml
Database:
domain: 10.0.1.1
username:root
passwd: my_passwd
schema: test
Redis
redis_domain: 10.0.1.2
redis_passwd: 123456
yaml-test
powered by yaml-test
以上。