在 yaml-cpp 中是不是可以获取文档中的***键名

Posted

技术标签:

【中文标题】在 yaml-cpp 中是不是可以获取文档中的***键名【英文标题】:In yaml-cpp is it possible to get the top-level key name in a document在 yaml-cpp 中是否可以获取文档中的***键名 【发布时间】:2018-03-16 04:49:38 【问题描述】:

给定以下 sample.yaml 文件:

Foo:
  id: 10
  name: "bob"

使用yaml-cpp,如何获取键名'Foo'?

给定代码:

YAML::Node doc = YAML::LoadFile("sample.yaml");
cout << "doc.Type(): " << doc.Type() << "\n";
cout << "doc.size(): " << doc.size() << "\n";
cout << "doc[Foo][id]: " << doc["Foo"]["id"] << "\n";

Type() 是 4 (Map) 正如预期的那样(Foo 是一个 Map)。

size() 如预期的那样为 1(Foo 是 doc 中唯一的项目)。

doc[Foo][id] 是 10,正如预期的那样。

但我似乎无法弄清楚如何从文档的一个节点中找到“Foo”。对 doc 进行迭代会生成一个 Node,但它的大部分操作都会引发异常。

【问题讨论】:

【参考方案1】:
for (const auto& kv : doc) 
  std::cout << kv.first.as<std::string>() << "\n"; // prints Foo
  const YAML::Node& value = kv.second;  // the value

【讨论】:

感谢您的开始。这在 0.5 中有效,但在最新的 0.6 中,情况发生了变化。现在,要获取密钥名称,只需: std::cout ()" 是必要的,以将其作为字符串获取,但它会自动流式传输到 ostream。 @DavyDurham 是的,两者都可以工作(我相信两个版本)。

以上是关于在 yaml-cpp 中是不是可以获取文档中的***键名的主要内容,如果未能解决你的问题,请参考以下文章

如何为特定的 yaml-cpp 节点设置发射样式

如何使用 yaml-cpp 删除 YAML 文档的节点

是否有适用于 Visual Studio 的 yaml-cpp 的工作示例?

是否可以在 yaml-cpp 中设置发射器缩进的基本级别?

使用 yaml-cpp 源代码创建 dll

在yaml-cpp中为yaml变量返回bool的任何方法?