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循环提前终止。

+1

你解决了这个问题吗?如果是这样,您实际上可以在下面写出答案并将其标记为“已接受”。 –

+0

对不起,我正在度假。我做了,我会。谢谢! – CompSciGuy139

我发现的答案在于我不清楚我得到的结果。

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" 

然后它完全按照我的预期解析。

所以问题是配置文件的格式,而不是解析逻辑。