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)
相关推荐
CCF ODC16 分钟前
2025年第一期 | CCF ODC《开源战略动态月报》
开源
從南走到北1 小时前
挪车小程序挪车二维码php+uniapp
微信小程序·小程序·开源·微信公众平台
ObjectX前端实验室5 小时前
个人网站开发记录-引流公众号 & 谷歌分析 & 谷歌广告 & GTM
前端·程序员·开源
silianpan6 小时前
文档检索服务平台
elasticsearch·搜索引擎·开源
uhakadotcom17 小时前
如何为开源项目做贡献
前端·开源
小白狮ww1 天前
国产超强开源大语言模型 DeepSeek-R1-70B 一键部署教程
人工智能·深度学习·机器学习·语言模型·自然语言处理·开源·deepseek
时光追逐者1 天前
推荐几款开源免费的 .NET MAUI 组件库
microsoft·开源·c#·.net·.net core·maui
kcarly1 天前
Safari 插件开发流程
开源
蚝油菜花1 天前
HealthGPT:你的AI医疗助手上线了:支持X光到病理切片,诊断建议+报告生成全自动
人工智能·开源
不一样的信息安全1 天前
开启开源新时代:DeepSeek引领人工智能技术开放化
人工智能·开源