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)
相关推荐
XIE3925 小时前
TipKit:开源富文本编辑器套件,一套逻辑,任意风格!
前端·笔记·开源
zzzzzz3107 小时前
picoclaw:从“迷你部署代理”看轻量化项目该怎样被理解
人工智能·开源·github
jonyleek8 小时前
低代码平台的数据架构设计:动态表单存储与查询优化
低代码·postgresql·开源·数据架构·动态表单·jvs低代码平台·jvs低代码
W658034199 小时前
Meta Muse Glimmer 30B开源深度拆解:Apache 2.0+投机解码,24GB显卡跑本地Agent
ai·开源·大模型·apache·deepseek
a11177616 小时前
基于 ROS 2 的 Franka Panda 机械臂视觉分拣系统
人工智能·开源
冬奇Lab17 小时前
一天一个开源项目(第209篇):holaOS - Agent 原生的本地工作台
人工智能·开源·agent
夏文强18 小时前
DeepSeek Harness 权限与审批:给 Agent 上一把 human-in-the-loop 的安全阀
人工智能·开源·大模型·agent·deepseek
风云19 小时前
MiniLog 1.0 GA 发布:零分配、零依赖的 .NET 高性能日志框架
开源·c#·.net·日志·高性能·minilog
oort12320 小时前
OortCloud Token Plan
大数据·人工智能·开源
星期一研究室21 小时前
拥有创造力的人,就像一只边牧
人工智能·开源·产品