yaml-cpp开源库使用

源码下载:https://github.com/jbeder/yaml-cpp

1.yaml-cpp编译

步骤主要如下:进入源码目录后

复制代码
mkdir build
cd build
cmake ...
make
make install
2.代码示例
cpp 复制代码
#include "funset.hpp"
#include <string>
#include <fstream>
#include <yaml-cpp/yaml.h>

int test_parse_yaml_file()
{
#ifdef _MSC_VER
    YAML::Node config = YAML::LoadFile("E:/GitCode/Messy_Test/testdata/test_yaml-cpp.yml");
#else
    YAML::Node config = YAML::LoadFile("testdata/test_yaml-cpp.yml");
#endif

    std::string blog_name{"xxxxx"}, blog_id{"xxxxx"}, blog_url{"xxxxx"};
    if (config["blog"])
    {
        if (config["blog"]["name"])
            blog_name = config["blog"]["name"].as<std::string>();
        if (config["blog"]["id"])
            blog_id = config["blog"]["id"].as<std::string>();
        if (config["blog"]["url"])
            blog_url = config["blog"]["url"].as<std::string>();
    }
    else
    {
        fprintf(stderr, "the node blog doesn't exist\n");
    }

    fprintf(stdout, "blog name: %s, id: %s, url: %s\n",
            blog_name.c_str(), blog_id.c_str(), blog_url.c_str());

    bool value1, value2;
    if (config["value1"])
        value1 = config["value1"].as<bool>();
    if (config["value2"])
        value2 = config["value2"].as<bool>();

    fprintf(stdout, "value1: %d, value2: %d\n", value1, value2);

    int number1;
    std::string number2, number3;
    float number4;
    if (config["number1"])
        number1 = config["number1"].as<int>();
    if (config["number2"])
        number2 = config["number2"].as<std::string>();
    if (config["number3"])
        number3 = config["number3"].as<std::string>();
    if (config["number4"])
        number4 = config["number4"].as<float>();
    fprintf(stdout, "number1: %d, number2: %s, number3: %s, number4: %f\n",
            number1, number2.c_str(), number3.c_str(), number4);

    std::string github_url, github_repos;
    if (config["github"])
        github_url = config["github"][0].as<std::string>();
    github_repos = config["github"][1].as<std::string>();
    fprintf(stdout, "github url: %s, repos: %s\n", github_url.c_str(), github_repos.c_str());

    return 0;
}

int test_generate_yaml_file()
{
    YAML::Node node;

    node["language"] = "cpp";
    node["version"] = 2;

    node["url"].push_back("https://blog.csdn.net/fengbingchun");
    node["url"].push_back("https://github.com/fengbingchun");

    YAML::Node primes = YAML::Load("[2, 3, 5, 7, 11]");
    primes.push_back(13);
    fprintf(stdout, "primes size: %d\n", primes.size());
    node["primes"] = primes;

    YAML::Node lineup = YAML::Load("{1B: Prince Fielder, 2B: Rickie Weeks, LF: Ryan Braun}");
    lineup["RF"] = "Corey Hart";
    lineup["C"] = "Jonathan Lucroy";
    node["name"] = lineup;

    node["platform"]["linux"].push_back("x86");
    node["platform"]["linux"].push_back("x86_64");
    node["platform"]["linux"].push_back("armv7");

    node["platform"]["windows"].push_back("x86");
    node["platform"]["windows"].push_back("x86_64");

#ifdef _MSC_VER
    std::ofstream fout("E:/GitCode/Messy_Test/testdata/tmp.yml");
#else
    std::ofstream fout("testdata/tmp.yaml");
#endif
    fout << node;

    return 0;
}

yml文件内容如下所示:

cpp 复制代码
blog:
  name: csdn
  id: fengbingchun
  url: https://blog.csdn.net/fengbingchun
 
commands:
  version:
  - g++ --version
  - cmake --version
  - git --version
 
value1: true
value2: false
value3: ~
 
number1: 123
number2: !!str 123
number3: "123"
number4: !!float 123
 
github: 
  - https://github.com/fengbingchun
  - NN_Test Face_Test OpenCV_Test
    Messy_Test CUDA_Test
 
data1: |
  There once
  was a
     short man
 
data2: >
  There once
  was a
     short man
 
date1: 2019-03-03
 
step: &id001   # defines anchor label &id001
  instrument:  Lasik 2000
  pulseEnergy: 5.4
 
step2: *id001   # refers to the first step (with anchor &id001)
相关推荐
NocoBase2 小时前
俄罗斯合作伙伴 Mobx,用 NocoBase 交付多场景方案
低代码·开源·资讯
尘世中一位迷途小书童3 小时前
🎨 SCSS 高级用法完全指南:从入门到精通
前端·css·开源
IvorySQL5 小时前
IvorySQL 亮相第 27 届中国国际软件博览会:开源创新,共筑软件新生态
数据库·postgresql·开源·ivorysql
王者鳜錸5 小时前
科大讯飞【免费】的开源模型实现录音转写与角色判定
开源·大模型·录音文件转文字·角色自动定位
FIT2CLOUD飞致云5 小时前
操作教程 | 在DataEase中嵌入SQLBot开源智能问数系统
开源·数据可视化
DisonTangor12 小时前
阿里开源Qwen3-Omni-30B-A3B三剑客——Instruct、Thinking 和 Captioner
人工智能·语言模型·开源·aigc
路由侠内网穿透13 小时前
本地部署开源持续集成和持续部署系统 Woodpecker CI 并实现外部访问
服务器·网络·windows·ci/cd·开源
阿部多瑞 ABU15 小时前
新增模块介绍:教师代课统计系统(由社区 @记得微笑 贡献)
开源·html·ai编程
ajassi200017 小时前
开源 C++ QT QML 开发(十七)进程--LocalSocket
c++·qt·开源
玄魂21 小时前
VTable Gantt 智能 zoom(缩放)功能介绍与开发实践
前端·开源·数据可视化