yams-cpp 嵌套序列返回映射而不是值
yams-cpp nested sequence returning map instead of value
我正在尝试解析以下 config.yaml 文件。
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
}
}
}
据我所知,问题是我希望 index 是一个 int 但 bazMap[i].as<int>()
我希望第一个循环是 1,第二个循环是 2,等等。我得到的是什么is bazMap[i].as<int>()
是地图类型。我在这里的理解中缺少什么?
谢谢,
布鲁斯
Update 答案是我在嵌套的 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"
然后它的解析完全符合我的预期。
所以问题是配置文件的格式,而不是解析逻辑。
我正在尝试解析以下 config.yaml 文件。
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
}
}
}
据我所知,问题是我希望 index 是一个 int 但 bazMap[i].as<int>()
我希望第一个循环是 1,第二个循环是 2,等等。我得到的是什么is bazMap[i].as<int>()
是地图类型。我在这里的理解中缺少什么?
谢谢,
布鲁斯
Update 答案是我在嵌套的 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"
然后它的解析完全符合我的预期。
所以问题是配置文件的格式,而不是解析逻辑。