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)
相关推荐
NocoBase7 小时前
GitHub 上 Star 数量前 10 的开源项目管理工具
开源·github·资讯
算家计算1 天前
7B参数拿下30个世界第一!Hunyuan-MT-7B本地部署教程:腾讯混元开源业界首个翻译集成模型
人工智能·开源
FIT2CLOUD飞致云1 天前
SQLBot开源智能问数系统成功进入GitHub趋势榜主榜,Star数突破2,000个!
开源
scilwb1 天前
Isaac Sim机械臂教程 - 阶段1:基础环境搭建与机械臂加载
人工智能·开源
杨杨杨大侠1 天前
Atlas Mapper 案例 01:初级开发者 - 电商订单系统开发
java·开源·github
FIT2CLOUD飞致云2 天前
AI智能问数能力全面升级,DataEase开源BI工具v2.10.13 LTS版本发布
开源
FIT2CLOUD飞致云2 天前
九月月报丨MaxKB在不同规模医疗机构的应用进展汇报
人工智能·开源
算家计算2 天前
AI配音革命!B站最新开源IndexTTS2本地部署教程:精准对口型,情感随心换
人工智能·开源·aigc
OpenTiny社区2 天前
OpenTiny NEXT 内核新生:生成式UI × MCP,重塑前端交互新范式!
前端·开源·agent
幂简集成explinks2 天前
e签宝签署API更新实战:新增 signType 与 FDA 合规参数配置
后端·设计模式·开源