如何通过YAML-cpp加载YAML文件

How to load YAML file via yaml-cpp?

本文关键字:YAML 文件 加载 YAML-cpp 何通过      更新时间:2023-10-16

我对yaml-cpp很陌生。我尝试了最简单的程序,但失败了,而且我在GitHub存储库中找不到答案。

#include <iostream>
#include "yaml-cpp/yaml.h"
using namespace std;
int main()
{
    YAML::Node config = YAML::LoadFile("sample.yaml");
    return 0;
}

来自YAML官方网站的sample.yaml样本:

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

这是错误消息:

libc++abi.dylib: terminating with uncaught exception of type YAML::BadFile: yaml-cpp: error at line 0, column 0: bad file

是库构建问题还是YAML语法问题,或者是我的API使用问题?

我使用的是yaml-cpp版本0.5.1。

我认为您正在使用的YAML-cpp版本中的YAML解析器不够高级,无法处理示例文件的第一行。示例文件试图说明一些更高级的YAML特性。您的解析器似乎无法处理所有这些问题。我建议您从一个更简单的示例文件开始。

我用三个在线验证器检查了你的文件,结果如下:

  • http://yaml-online-parser.appspot.com/(无效)
  • http://wiki.ess3.net/yaml/105940(无效)
  • http://yamllint.com/(有效)

毫无疑问,该文件是有效的YAML,但这并不意味着所有现存的解析器都可以解析它!

看来yaml-cpp找不到您的文件。你能加载任何文件吗?请确保该文件在程序的工作目录中,为了保持理智,请确保可以先加载一个非常简单的文件。

您的yaml文件需要位于您的结束状态所在的位置,这取决于您给定的路径。