【发布时间】:2016-12-08 11:40:02
【问题描述】:
我有以下 yaml(我的案例的简化版本):
---
my_list:
- item1:
name: name1
- item2:
name: name2
然后我尝试使用 C++ 和 YAML-CPP 像这样解析它:
for (const auto & p : node["my_list"]) {
std::cout << p.IsMap() << std::endl;
YAML::Node key = p.first;
YAML::Node value = p.second;
}
这显然有效(IsMap() 返回 1),但只要我这样做:p.first.as<std::string>(); 它就会崩溃。我应该如何解析这个?
相反,如果我这样做:
for (auto it = node.begin(); it != node.end(); ++it) {
YAML::Node key = it->first;
YAML::Node value = it->second;
std::cout << key.as<std::string>() << std::endl;
}
这里的输出是my_list,所以我可以继续解析。
我的问题是:如何使用 C++11 范围 for 循环进行解析?谢谢
【问题讨论】:
-
你确定 p 是一对<:node yaml::node>,而不是第一个和第二个可转换为 YAML::Nodes 的东西吗?
-
不,我不确定。我不清楚 YAML-CPP 库如何。我尝试了其他东西,例如
p.as<std::string>()。如果我做一个字典很容易解析,但由于某种原因列表不是。 -
我终于找到了答案,虽然我不知道为什么!
for (const auto & p : node["my_list"])似乎返回列表本身,因此您可以执行p[0], p[1]...'. The dictionary is an element of the list, so another for loop is required for every dictionary:for (const auto & elem : p)`。如果没有人提供更好的答案和更好的解释,我会写这个作为答案。
标签: c++ c++11 for-loop yaml-cpp