yaml解析的方式? (YAML-CPP)

时间:2011-02-23 11:17:09

标签: yaml yaml-cpp

我已经制作了如下的yaml文件。

Define1: &Define1
  0: zero
  1: one

Define2:
  <<: *Define1
  2: two

Online YAML parser中尝试过。结果如下。 (只需了解节点的构造方式。)

{
  "Define1": {
    "0": "zero", 
    "1": "one"
  }, 
  "Define2": {
    "0": "zero", 
    "1": "one", 
    "2": "two"
  }
}

当然我预计'yaml-cpp'会解析同样的方式,但它有点不同。

我猜是这样的。 (几乎可以肯定)

{
  "Define1": {
    "0": "zero", 
    "1": "one"
  }, 
  "Define2": {
    "Define1": {
      "0": "zero", 
      "1": "one"
    },  
    "2": "two"
  }
}

到底是怎么回事!然后我必须在循环时检查节点类型吗?

这是一个已知问题吗?或者'yaml-cpp'只是解析那个?

这段代码就是我做的。

// already parsed
const YAML::Node& node = &(docYAML)["Define2"];

for (YAML::Iterator it=node->begin(); it!=node->end(); ++it)
{
    const YAML::Node& nodeList = it.second();

    std::string str;
    nodeList[0] >> str;
}

1 个答案:

答案 0 :(得分:4)

yaml-cpp尚未实现“合并”键。如果您想在问题实施之前解决问题,请参阅http://code.google.com/p/yaml-cpp/issues/detail?id=41

目前,yaml-cpp实际上是将您的YAML文件解析为:

{
  "Define1": {
    "0": "zero", 
    "1": "one"
  }, 
  "Define2": {
    "<<": {
      "0": "zero", 
      "1": "one"
    },  
    "2": "two"
  }
}