簡體   English   中英

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, bazMap[i].as<int>() 。我得到的是相反, bazMap[i].as<int>()的類型為map。 我在這里的理解中缺少什么?

謝謝,

布魯斯

更新答案是我在嵌套循環中停了下來。

我找到的答案在於,我不清楚自己得到了什么。

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"

然后它完全按照我的預期進行了解析。

因此,問題出在配置文件的格式,而不是解析邏輯中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM