【问题标题】:The way of yaml parsing? (yaml-cpp)yaml解析的方式? (yaml-cpp)
【发布时间】:2011-02-23 11:17:09
【问题描述】:

我已经制作了一个如下所示的 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;
}

【问题讨论】:

    标签: yaml yaml-cpp


    【解决方案1】:

    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"
      }
    }
    

    【讨论】:

    • 感谢您的回答并感谢您提供链接。我想它似乎仍然不支持合并,因为问题仍然存在。也许我必须寻找另一种解决方案。谢谢。 ;)
    猜你喜欢
    • 2015-12-06
    • 2020-10-14
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 2018-10-13
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多