yams-cpp嵌套序列返回地图而不是值
问题描述:
我想解析下面的config.yaml文件。yams-cpp嵌套序列返回地图而不是值
config.yaml
foo:
bar:
baz: [1, 2, 3, 4]
bam: "some_string_value"
test.cpp
YAML::Node configObj = YAML::LoadFile("cfig.yaml"); // loads file just fine
YAML::Node fooObj = configObj["foo"]; // this Node object is a Map
// iterate over foo node to get bar node
for(auto it = fooObj.begin(); it != fooObj.end(); ++it){
YAML::Node barMap = it->second; // this Node object is a Map
// iterate over bar node to get bad node
for(auto i = barMap.begin(); i != barMap.end(); ++i){
YAML::Node bazMap = i->second; // this node is a sequence
for(std::size_t i=0; i<bazMap.size(); i++
auto index = bazMap[i].as<int>(); // <<< This is the problem
}
}
}
据我所看到的问题是,我期待指数是一个整数,但bazMap[i].as<int>()
我期待为1的第一环, 2第二等,而我得到的是bazMap[i].as<int>()
是类型映射。我在这里理解的是什么?
感谢,
布鲁斯
更新的回答是,我在嵌套的for循环提前终止。
答
我发现的答案在于我不清楚我得到的结果。
在config.yaml
文件我期待下面:
foo.Type() == Map
bar.Type() == Sequence
baz.Type() == Sequence
,但我是越来越是:
foo.Type() == Map
bar.Type() == Map
baz.Type() == Sequence
我不得不这样做,以解决此问题是改变配置文件。
foo:
bar:
- baz: [1, 2, 3, 4]
- bam: "some_string_value"
然后它完全按照我的预期解析。
所以问题是配置文件的格式,而不是解析逻辑。
你解决了这个问题吗?如果是这样,您实际上可以在下面写出答案并将其标记为“已接受”。 –
对不起,我正在度假。我做了,我会。谢谢! – CompSciGuy139