如何使用yaml-cpp构建节点



我想在我的一个项目中使用yaml-cpp来生成一个yaml文件,但我很难弄清楚如何才能做到这一点。我需要发出的yaml文件应该是这样的:

action_counts:
version: 0.3
subtree:
- name: system
local:
- name: adder
action_counts:
- name: add
counts: 1000
- name: idle
counts: 10000

到目前为止,我还没能写出最后四行。我知道"-"代表一个数组,但我不知道如何打印名称并像那样计算键。

我已经写了一些代码来测试yaml-cpp。代码看起来是这样的:

YAML::Node node;
node["action_counts"] = YAML::Null;
node["action_counts"]["version"] = "0.3";
node["action_counts"]["subtree"].push_back("system");
std::ofstream fout("fileUpdate.yaml"); 
fout << node; 
return 0;

它产生的输出是这样的:

action_counts:
version: 0.3
subtree:
- system

这里的最后一行是错误的,但我还没有找到如何打印- name: system而不是这个。我该怎么做?

一旦完成,我该如何打印其余部分?local- name阵列的一部分吗?我想,一旦我知道如何将它们格式化为两行,我就可以自己解决剩下的问题。

yaml-cpp库的测试中可以找到很多创建消息的例子。

所需的结构可以形成如下:

#include <fstream>
#include "yaml-cpp/yaml.h"
int main() {
YAML::Node action_1;
action_1["name"] = "add";
action_1["counts"] = 1000;
YAML::Node action_2;
action_2["name"] = "idle";
action_2["counts"] = 10000;
YAML::Node local_item;
local_item["name"] = "adder";
local_item["action_counts"].push_back(action_1);
local_item["action_counts"].push_back(action_2);
YAML::Node local;
local.push_back(local_item);
YAML::Node subtree_item;
subtree_item["name"] = "system";
subtree_item["local"] = local;
YAML::Node root;
root["action_counts"]["version"] = "0.3";
root["action_counts"]["subtree"].push_back(subtree_item);
std::ofstream fout("fileUpdate.yaml");
fout << root;
return 0;
}

数组中的值只是键为namelocal的另一个映射,因此您需要将该映射放入数组中,例如:

YAML::Node systemTree;
systemTree["name"] = "system";
/* assuming you have put together adderTree similarly */
systemTree["local"].push_back(adderTree);
YAML::Node root;
root["action_counts"] = YAML::Null;
root["action_counts"]["version"] = "0.3";
root["action_counts"]["subtree"].push_back(systemTree);

最新更新