perl - 在 perl 中解析 yaml --> 代码:YAML_LOAD_ERR_BAD_MAP_ELEMENT
问题描述
我有一个 yaml 文件,它是从另一个来源生成的,如下所示。
connect1:
connect2:
- { level1 : name, level2: age,
level3: gender}
我的代码看起来像这样——?
use YAML::Tiny qw(LoadFile);
use YAML;
use YAML::Loader;
use YAML::Syck;
use YAML qw(LoadFile);
use Data::Dumper;
my $data = LoadFile("file.yaml");
my @config = $data->{connect1}->{connect2};
print Dumper(@config);
我收到以下错误-> YAML 错误:地图代码中的无效元素:YAML_LOAD_ERR_BAD_MAP_ELEMENT 行:3 文档:1
如果 level1 、 level2 和 leve3 在同一行,那么我看不到这个问题。我认为这个问题是因为缩进。但是我无法更改这个file.yaml。那么 perl 中有没有一种方法可以在不修改 file.yaml 的情况下解析这个 yaml 文件?
解决方案
Perl 中 YAML 的状态有点令人遗憾,因为有几个模块支持不同的功能。
YAML::Syck、YAML::XS 和 YAML::PP 可以解析您的示例。YAML::XS 现在可能是一个不错的选择。
YAML.pm是 YAML 的第一个 perl 模块,它是为 YAML 1.0 编写的。
YAML::Syck基于为 YAML 1.0 编写的 libsyck。它可以解析的不仅仅是 YAML.pm。
YAML::XS基于为 YAML 1.1 编写的 libyaml。您应该能够用它解析大多数 YAML,并且 libyaml 用于(或被移植到)许多其他语言。
YAML::Tiny只支持 YAML 的一个子集,它不包括流集合{ ... }
和[ ... ]
别名/锚 ( &x
, *x
)
YAML::PP很新,已经可以解析很多,但它还不完整。它旨在解析 YAML 1.2(未来还将部分支持 1.1) 免责声明:我是作者
在这里您可以找到我在 2017 年伦敦 Perl 研讨会上的幻灯片: https ://perlpunk.github.io/slides.lpw2017/yaml-where-and-how-to-use/
从幻灯片 24 开始,您会发现 5 个模块的快速概览。
推荐阅读
- reactjs - React 中 webForm 的单个 onChange 处理程序
- azure-cosmosdb - 如何在 Azure ARM 模板的运行时将变量从 Terraform 传递到 ARM 模板和动态变量?
- pandas - 用 pyspark df 中的新元素填充空值
- powershell - 寻找修复 New-PSSession 错误代码 0x80090322 的技巧
- scala - CountDistinct 基于 spark scala 中的条件
- java - 尝试在 JavaFX 中播放视频时出现 java.lang.reflect.InvocationTargetException
- storybook - 故事书中的嵌套参数或对象参数
- ios - 我的 If let 语句失败,我不知道为什么
- php - 如何使用 DI 在控制器中编写方法测试?
- javascript - 通过独特的深层属性循环遍历 JSON 对象和求和值