在perl中解析yaml - >代码:YAML_LOAD_ERR_BAD_MAP_ELEMENT

use*_*525 3 perl parsing yaml

我有一个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?

tin*_*ita 6

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个模块.