我有一个yaml文件,它是从另一个源生成的,如下所示.
connect1:
connect2:
- { level1 : name, level2: age,
level3: gender}
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样 - ?
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);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误 - > YAML错误:地图中的元素无效代码:YAML_LOAD_ERR_BAD_MAP_ELEMENT行:3文档:1
如果level1,level2和leve3在同一行,那么我没有看到这个问题.我认为这个问题是因为缩进.但是我无法改变这个文件.yaml.那么在perl中是否有一种方法可以解析这个yaml文件而无需修改file.yaml?
Perl中的YAML状态有点不幸,因为有几个模块支持不同的功能.
YAML :: Syck,YAML :: XS和YAML :: PP可以解析你的例子.YAML :: XS现在可能是个不错的选择.
YAML.pm是YAML的第一个perl模块,它是为YAML 1.0编写的.
YAML :: Syck基于libsyck,它是为YAML 1.0编写的.它可以解析超过YAML.pm.
YAML :: XS基于libyaml,为YAML 1.1编写.您应该能够使用它解析大多数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个模块.
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |