找到 YAML 文件,但无法解析内容

Posted

技术标签:

【中文标题】找到 YAML 文件,但无法解析内容【英文标题】:YAML file found, but unable to parse content 【发布时间】:2020-10-15 15:49:51 【问题描述】:

我正在尝试使用 Visual Studio 2019 社区的 yaml-cpp (https://github.com/jbeder/yaml-cpp) 解析 YAML 配置文件。

#include <iostream>
#include "yaml-cpp/yaml.h"

int main(int argc, char* argv[])

    YAML::Node config;

    try
    
        YAML::Node config = YAML::LoadFile("conf.yml");
    
    catch (YAML::BadFile e)
    
        std::cerr << e.msg << std::endl;
        return (1);
    
    catch (YAML::ParserException e)
    
        std::cerr << e.msg << std::endl;
        return (1);
    

    std::cout << config["window"] ? "Window found" : "Window not found" << std::endl;
    return (0);

这是我的 YAML 文件:

---
window:
  width: 1280
  height: 720
...

但结果总是:

找不到窗口

加载成功,但“config”节点对象的内容似乎为空。我做错了什么?

【问题讨论】:

【参考方案1】:

你有variable shadowing

YAML::Node config; // This is the config you print out at the end

try

    // The below config is local to the narrow try-scope, shadowing the
    // config you declared above.
    YAML::Node config = YAML::LoadFile("conf.yml");

更正:

YAML::Node config;

try

    config = YAML::LoadFile("conf.yml");

还要在三元运算符周围加上括号:

std::cout << (config["window"] ? "Window found" : "Window not found") << '\n';

【讨论】:

我不知道阴影在 C++ 中是一个东西,我认为它会抛出一个错误,因此没有考虑它。感谢您的帮助!

以上是关于找到 YAML 文件,但无法解析内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在 azure devops 中解析 yaml 文件

Golang使用yaml第三方包无法正确解析配置参数

yaml 解析时出错。预期 <block end>,但找到 <scalar>

k8s中pod内dns无法解析的问题

去解析yaml文件

rails 错误,无法解析 YAML